본문 바로가기
코딩 공부/web & Java

[Spring] Jakarta Contexts and Dependency injection (CDI)

by 현장 2023. 10. 6.

Jakarta Contexts and Dependency injection (CDI)

CDI 규격은 2009년 12월에 Java EE 6 플랫폼에 도입되어 지금은 Jakarta Contexts and Dependency Injection이라고 부르게되었습니다. CDI는 규격이고, 인터페이스이며, 구현이 없고 Spring Framework에서 CDI를 구현합니다.

CDI에서 중요한 API 어노테이션 

  • Inject (~ 스프링의 AutoWired와 비슷함)
  • Named (~ 스프링의 Component와 비슷)
  • Qualifier
  • Scope
  • Singleton
  • etc..

예시 코드

//@Component
@Named
class BussinessService {
    private DataService dataService;

    //@Autowired
    @Inject
    public void setDataService(DataService dataService) {
        System.out.println("Setter Injection");
        this.dataService = dataService;
    }

    public DataService getDataService() {
        return dataService;
    }

}

//@Component
@Named
class DataService {

}

@Configuration
@ComponentScan
public class CdiContextLuncherApplication {

    public static void main(String[] args) {
        try (var context =
                     new AnnotationConfigApplicationContext
                             (CdiContextLuncherApplication.class))
        {
            Arrays.stream(context.getBeanDefinitionNames())
                    .forEach(System.out::println);

            System.out.println(context.getBean(BussinessService.class)
                    .getDataService());
        }


    }
}

출력

Setter Injection
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
cdiContextLuncherApplication
bussinessService
dataService
com.in28minutes.learnspringframework.examples.g1.DataService@485966cc
 
 

'코딩 공부 > web & Java' 카테고리의 다른 글

[Spring] 스테레오 타입 어노테이션  (0) 2023.10.09
[Spring] Spring XML 설정  (1) 2023.10.09
[Java] Java EE, J2EE, Jakarta EE  (1) 2023.10.06
[Spring] @PostConstruct와 @PreDestroy  (1) 2023.10.06
[Spring] Bean 스코프  (0) 2023.10.05