더북(TheBook)

코드 2-3 의존체 주입 - 수신자

package com.devchronicles.basicsofjavaee;
 
import javax.inject.Inject;
 
public class Service {
 
    @Inject
    private Message message;
        public void showMessage() {
            System.out.println(message.getMessage());
 
        }
}

만약 컨테이너가 관리하는 Message 타입 빈이 둘 이상이면 어떻게 할까요? Message 를 인터페이스로 만들어 두 클래스가 구현하도록 만들면 됩니다. 타입의 모호함을 전략(strategy)으로 해결하는 것이죠. 이 책에서 이런 상황은 앞으로도 종종 나옵니다. 궁금해서 못 참겠다면 5장부터 읽어도 좋습니다.

컨텍스트(context)는 EJB와 CDI 관리 빈을 가름하는 뚜렷한 기준입니다. CDI 빈은 특정 컨텍스트 내에서만 존재하지만 EJB는 그렇지 않습니다. CDI 빈은 어떤 스코프(scope)의 컨텍스트에서 생성되므로 스코프가 살아있는 중에만 존재하고 사후엔 없어집니다. 스코프는 애플리케이션 스코프(@ApplicationScoped), 대화 스코프(@ConversationScoped), 세션 스코프(@SessionScoped), 요청 스코프(@RequestScoped) 네 가지입니다. CDI 컨테이너는 빈에 지정한 스코프에 따라 빈의 생사를 결정합니다. 이를테면 @SessionSspan 빈은 HTTP 세션이 유효할 동안 존재하다 스코프가 끝나면 사라지고 가비지 컬렉션 대상이 됩니다. 이와 달리 EJB는 스코프에 얽매이지 않고 @Remove를 붙인 메서드로 빈을 지웁니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.