본문 바로가기

SpringFramework Core - I. IoC 컨테이너/11. JSR 330의 표준 어노테이션들 사용하기

11.3. JSR-330 표준 어노테이션들의 한계

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-standard-annotations-limitations

 

 

표준 어노테이션으로 작업을 할 때는 몇 가지 중요한 기능들을 사용할 수 없다는 점을 알고 있어야한다. 다음 표를 보자.

 

스프링 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 메소드와 결합해서 사용가능 함.