1.11 JSR 330 표준 어노테이션 사용하기 by sh
1.11. JSR 330 표준 어노테이션 사용
스프링 3.0부터 스프링은 JSR-330 표준 어노테이션(의존성 주입)을 지원합니다. 이러한 어노테이션은 스프링 어노테이션과 동일한 방식으로 스캔됩니다. 그들을 사용하려면, 클래스 패스에 이것과 관련된 jar가 있어야합니다.
메이븐을 사용하는 경우, |
1.11.1. @Inject와 @Named를 사용한 의존성 주입
@Autowired
대신에 @javax.inject.Inject를
다음과 같이 사용할 수 있습니다.
@Autowired
와 마찬가지로, 필드 레벨, 메소드 레벨, 생성자 인수 레벨에서 @Inject
를 사용할 수 있습니다. 또한, 주입 지점을 Provider
로 선언하여 짧은 범위의 빈에 대한 주문형 액세스 또는 Provider.get()
호출을 통해 다른 빈에 대한 게으른 액세스를 허용할 수 있습니다. 다음 예제는 앞의 예제의 변형을 제공합니다:
JSR-330의 Provider
ObjectFactory와 같은 개념. 미리 지정된 단순한 팩토리 API를 이용하는 것.
ObjectFactory : 스프링이 미리 정의해둔 팩토리 인터페이스로 XML에 빈으로 등록하거나 @Bean으로 생성한다.
ObjectFactory보다 나은 점은 팩토리 빈을 따로 등록할 필요가 없다는 점. 어노테이션에 의해 Di할 때 Provider를 보고 스프링이 Provider를 구현한 팩토리 오브젝트를 자동으로 만들어서 주입시켜준다.
좁은 범위의 객체를 광범위하게 범위가 지정된 빈에 주입할 때 사용.
삽입해야만 하는 의존성에 대해 정규화된 이름을 사용하려면 다음 예제와 같이 @Named
어노테이션을 사용해야 합니다.
@Autowired
와 마찬가지로 @Inject
는 java.util.Optional
또는 @Nullable
과 함께 사용할 수도 있습니다. @Inject
에는 required
속성이 없으므로 여기에 더 많이 적용됩니다. 다음 예제는@Inject
와 @Nullable
을 사용하는 방법을 보여줍니다:
1.11.2. @Named 및 @ManagedBean: @Component 어노테이션에 대한 표준 등가물
다음 예제처럼 @Component
대신에 @javax.inject.Named
또는 javax.annotation.ManagedBean
를 사용할 수 있습니다:
@Component(“...”)
XML의 빈으로 등록해달라는 표시. Id는 기본적으로 클래스 명의 첫 글자를 소문자로 해서 지정한다.
구성 요소의 이름을 지정하지 않고 @Component
를 사용하는 것은 매우 일반적입니다. @Named
는 다음 예제와 같이 비슷한 방식으로 사용할 수 있습니다:
@Named
또는 @ManagedBean
을 사용하면, 다음 예제와 같이 스프링 어노테이션을 사용할 때와 완전히 동일한 방식으로 구성 요소 검색을 사용할 수 있습니다:
|
1.11.3. JSR-330 표준 어노테이션의 제한 사항
표준 어노테이션으로 작업할 때 다음 표와 같이 몇 가지 중요한 기능을 사용할 수 없음을 알아야 합니다:
Spring | javax.inject.* | javax.inject 제한사항 및 코멘트 |
@Autowired | @Inject |
|
@Component | @Named / @ManagedBean | JSR-330은 구성 가능한 모델을 제공하지 않으며 명명된 구성 요소를 식별하는 유일한 방법입니다. |
@Scope("singleton") | @Singleton | JSR-330 기본 범위는 스프링의 |
@Qualifier | @Qualifier / @Named |
|
@Value | - | no equivalent |
@Required | - | no equivalent |
@Lazy | - | no equivalent |
ObjectFactory | Provider |
|
Last updated