@Named / @Inject (ft. CDI)
2023. 5. 31. 16:11ㆍ기술 창고/어노테이션 창고
728x90
반응형
SMALL
@Named / @Inject
CDI (Context and Dependency Injection) 에서는 기존의 스프링에서 사용했던 어노테이션 일부를 대체할 수 있습니다.
그 중에서 대표적인 것이 @Named 와 @Inject 인데, @Named 는 @Component 를 대체할 수 있고, @Inject 는 @Autowired 를 대체할 수 있습니다.
각 대체되는 어노테이션의 용도와 뜻도 유사합니다.
@Named : @Component 와 유사하게 Bean객체로 지정하는 어노테이션.
@Inject : @Autowired 와 유사하게 의존성 주입 받은 객체를 자동 주입 시켜주는 어노테이션.
// CDI 에서는 @Component 대신 @Named 를 대체로 사용할 수 있다.
@Named
class BusinessService{
private DataService dataService;
public DataService getDataService(){
return dataService;
}
@Inject // setter 의존성 주입. CDI 에서는 @Autowired 대신에 @Inject 를 대체해서 사용할 수 있다.
public void setDataService(DataService dataService){
System.out.println("Setter Injection");
this.dataService = dataService;
}
}
@Named
class DataService{
}
@Configuration
@ComponentScan // Component로 선언된 객체가 있는 경로로 가서 해당 객체를 자동으로 Bean 객체 생성 주입
public class CdiContextLauncherApplication {
public static void main(String[] args) {
try (var context = new AnnotationConfigApplicationContext(CdiContextLauncherApplication.class)) {
Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
System.out.println("어플리케이션 실행");
System.out.println(context.getBean(BusinessService.class).getDataService());
}
}
}
위의 예시 코드에서 보이는 것처럼 기존에 사용했던 @Autowired, @Component 랑 동일하게 사용되고 역할도 유사합니다.
<!-- https://mvnrepository.com/artifact/jakarta.inject/jakarta.inject-api -->
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
<version>2.0.1</version>
</dependency>
CDI 를 사용하려면 jakarta.inject 디펜던시를 import 해서 반영시켜야 합니다.
저는 maven 을 사용하기 때문에 위와 같은 형식으로 pom.xml에 디펜던시를 import 해주었습니다.
728x90
반응형
LIST
'기술 창고 > 어노테이션 창고' 카테고리의 다른 글
@Controller / @Service / @Repository (0) | 2023.06.06 |
---|---|
@PostConstruct / @PreDestroy (0) | 2023.05.30 |
@Scope (0) | 2023.05.30 |
@Lazy (0) | 2023.05.30 |
@Primary (0) | 2023.05.30 |