1.11 JSR 330 표준 어노테이션 사용하기 by sh
Last updated
Was this helpful?
Last updated
Was this helpful?
스프링 3.0부터 스프링은 JSR-330 표준 어노테이션(의존성 주입)을 지원합니다. 이러한 어노테이션은 스프링 어노테이션과 동일한 방식으로 스캔됩니다. 그들을 사용하려면, 클래스 패스에 이것과 관련된 jar가 있어야합니다.
@Autowired
대신에 @javax.inject.Inject를
다음과 같이 사용할 수 있습니다.
@Autowired
와 마찬가지로, 필드 레벨, 메소드 레벨, 생성자 인수 레벨에서 @Inject
를 사용할 수 있습니다. 또한, 주입 지점을 Provider
로 선언하여 짧은 범위의 빈에 대한 주문형 액세스 또는 Provider.get()
호출을 통해 다른 빈에 대한 게으른 액세스를 허용할 수 있습니다. 다음 예제는 앞의 예제의 변형을 제공합니다:
삽입해야만 하는 의존성에 대해 정규화된 이름을 사용하려면 다음 예제와 같이 @Named
어노테이션을 사용해야 합니다.
@Autowired
와 마찬가지로 @Inject
는 java.util.Optional
또는 @Nullable
과 함께 사용할 수도 있습니다. @Inject
에는 required
속성이 없으므로 여기에 더 많이 적용됩니다. 다음 예제는@Inject
와 @Nullable
을 사용하는 방법을 보여줍니다:
다음 예제처럼 @Component
대신에 @javax.inject.Named
또는 javax.annotation.ManagedBean
를 사용할 수 있습니다:
구성 요소의 이름을 지정하지 않고 @Component
를 사용하는 것은 매우 일반적입니다. @Named
는 다음 예제와 같이 비슷한 방식으로 사용할 수 있습니다:
@Named
또는 @ManagedBean
을 사용하면, 다음 예제와 같이 스프링 어노테이션을 사용할 때와 완전히 동일한 방식으로 구성 요소 검색을 사용할 수 있습니다:
@Component
와 달리, JSR-330 @Named
및 JSR-250 ManagedBean
어노테이션은 조합할 수 없습니다. 커스텀 컴포넌트 어노테이션을 작성하기 위해서는 스프링의 스테레오 타입 모델을 사용해야 합니다.
표준 어노테이션으로 작업할 때 다음 표와 같이 몇 가지 중요한 기능을 사용할 수 없음을 알아야 합니다:
Spring
javax.inject.*
javax.inject 제한사항 및 코멘트
@Autowired
@Inject
@Inject
에는 ‘required’ 속성이 없습니다. 대신 Java 8의 Optional
과 함께 사용할 수 있습니다.
@Component
@Named / @ManagedBean
JSR-330은 구성 가능한 모델을 제공하지 않으며 명명된 구성 요소를 식별하는 유일한 방법입니다.
@Scope("singleton")
@Singleton
JSR-330 기본 범위는 스프링의 prototype
과 같습니다. 그러나 스프링의 일반적인 기본 값과 일관성을 유지하기 위해 스프링 컨테이너에 선언된 JSR-330 빈은 기본적으로 singleton
입니다. singleton
이 아닌 다른 스코프를 사용하려면 스프링의 @Scope
어노테이션을 사용해야 합니다. javax.inject
는 @Scope
어노테이션도 제공합니다. 그럼에도 불구하고, 이것은 사용자 자신의 어노테이션을 작성하는 용도로만 사용됩니다.
@Qualifier
@Qualifier / @Named
javax.inject.Qualifier
는 사용자 정의 한정자를 작성하기 위한 메타 – 어노테이션입니다. 구체적인 String
한정 자(예: 스프링의 @Qualifier
와 값)는javax.inject.Named
를 통해 연결할 수 있습니다.
@Value
-
no equivalent
@Required
-
no equivalent
@Lazy
-
no equivalent
ObjectFactory
Provider
javax.inject.Provider
는 스프링의 ObjectFactory
에 대한 직접적인 대안이며, 더 짧은 get() 메소드 이름으로만 가능합니다. 스프링의 @Autowired
와 함께 사용하거나 어노테이션이 없는 생성자 및 설정 메소드와 함께 사용할 수도 있습니다.
메이븐을 사용하는 경우, javax.inject
artifact는 표준 메이븐 저장소(에서 사용할 수 있습니다. pom.xml 파일에 다음 종속성을 추가할 수 있습니다.