표준 어노테이션으로 작업을 할 때는 몇 가지 중요한 기능들을 사용할 수 없다는 점을 알고 있어야한다. 다음 표를 보자.
스프링 | javax.inject.* | javax.inject 제한 / 코멘트 |
@Autowired | @Inject | @Inject는 'required' 속성이 없음. 대신에 자바 8의 'Optional'을 쓸 수 있음. |
@Component | @Named / @ManagedBean | JSR-330은 구성이 가능한 모델을 제공하지 않음. 이름으로만 컴포넌트들을 식별할 수 있음. |
@Scope("singleton") | @Singleton | JSR-330의 기본 scope는 스프링에서의 'prototype'과 같음. 그런데 스프링의 기본값들과의 호환을 위해서 JSR-330 bean은 기본적으로 'singleton'으로 선언됨. 싱글턴 이외의 scope를 쓰고 싶을 때는 스프링의 @Scope 어노테이션을 사용하면 됨. javax.inject도 @Scope 어노테이션을 제공하긴 하지만 커스텀한 어노테이션을 만들 수 있게 하기 위해 제공되는 것임. |
@Qualifier | @Qualifer / @Named | javax.inject.Qualifier는 커스텀한 수식자를 만들기 위한 메타 어노테이션일 뿐임. 구체적인 'String' 수식자들(스프링의 @Qualifier와 그 값들처럼)은 javax.inject.Named와 결합해야 가능. |
@Value | - | 대응되는 것 없음 |
@Required | - | 대응되는 것 없음 |
@Lazy | - | 대응되는 것 없음 |
ObjectFactory | Provider | javax.inject.Provider는 스프링의 ObjectFactory에 직접적인 대체자임. 단순히 더 짧은 get() 메소드 이름을 가지고 있을 뿐임. 스프링의 @Autowired나 어노테이션이 없는 생성자 및 setter 메소드와 결합해서 사용가능 함. |
'SpringFramework Core - I. IoC 컨테이너 > 11. JSR 330의 표준 어노테이션들 사용하기' 카테고리의 다른 글
11.2. @Named와 @ManagedBean : @Component 어노테이션에 대응하는 표준 (0) | 2020.04.24 |
---|---|
11.1. @Inject와 @Named로 의존성 주입하기 (0) | 2020.04.24 |
11. JSR 330 표준 어노테이션 사용하기 (0) | 2020.04.22 |