7.4.2. 컨텍스트 및 종속성 주입을 사용하여 객체 삽입을 빈에 주입합니다.

애플리케이션에서 컨텍스트 및 종속성 주입 구성 요소가 탐지되면 컨텍스트 및 종속성 주입 구성 요소가 자동으로 활성화됩니다. 구성을 기본값과 다르게 사용자 지정하려면 배포 아카이브에 META-INF/beans.xml 파일 또는 WEB-INF/beans.xml 파일을 포함할 수 있습니다.

다른 오브젝트에 오브젝트 삽입
  1. 클래스 인스턴스를 가져오려면 빈 내에서 @Inject 로 필드에 주석을 추가합니다.

    public class TranslateController {
       @Inject TextTranslator textTranslator;
       ...
  2. 삽입된 오브젝트의 메서드를 직접 사용합니다. TextTranslator변환 방법이 있다고 가정합니다.

    // in TranslateController class
    
    public void translate() {
       translation = textTranslator.translate(inputText);
    }
  3. 빈 생성자에 주입을 사용합니다. 다음과 같이 팩토리 또는 서비스 검색 도구를 사용하는 대신 빈 생성자에 오브젝트를 삽입하여 생성할 수 있습니다.

    public class TextTranslator {
    
       private SentenceParser sentenceParser;
       private Translator sentenceTranslator;
    
       @Inject
       TextTranslator(SentenceParser sentenceParser, Translator sentenceTranslator) {
          this.sentenceParser = sentenceParser;
          this.sentenceTranslator = sentenceTranslator;
       }
    
       // Methods of the TextTranslator class
       ...
    }
  4. Instance(<T>) 인터페이스를 사용하여 프로그래밍 방식으로 인스턴스를 가져옵니다. 빈 유형으로 매개 변수를 지정하면 인스턴스 인터페이스에서 TextTranslator 의 인스턴스를 반환할 수 있습니다.

    @Inject Instance<TextTranslator> textTranslatorInstance;
    ...
    public void translate() {
       textTranslatorInstance.get().translate(inputText);
    }

빈에 오브젝트를 삽입하면 빈에서 모든 오브젝트 메서드 및 속성을 사용할 수 있습니다. 주입이 이미 존재하는 인스턴스를 참조하지 않는 한 빈의 생성자에 주입하는 경우 빈의 생성자를 호출할 때 주입된 오브젝트의 인스턴스가 생성됩니다. 예를 들어 세션 수명 동안 세션 범위 빈을 삽입하면 새 인스턴스가 생성되지 않습니다.