스프링 레시피 CH2.4 @Resource와 @Inject를 붙여 POJO 자동 연결 하기
2023. 12. 11. 22:18ㆍspring
과제
스프링 전용 @Aurowired 대신, 자바 표준 애너테이션 @Resource, @Inject로 POJO를 자동 연결하여 참조하세요
해결책
@Resource는 이름으로 POJO 레퍼런스를 찾아 연결합니다.
@Inject는 타입으로 POJO 레퍼런스를 찾아 연결합니다.
풀이
@Autowired는 org.springframework.beans.factory.annotation 패키지에 속해있어서 스프링에서만 쓸 수 있다.
자바 진영에서는 동일한 기능의 표준화된 애너테이션이 있다. @Resource, @Inject가 그렇다.
2.4.1 @Resource로 POJO 자동 연결하기
타입으로 POJO를 찾아 자동 연결하는 기능은 @Resource나 @Autowired나 마찬가지다
public class SequenceGenerator {
@Resource
private PrefixGenerator prefixGenerator
}
하지만 타입이 같은 POJO가 여럿일 때 @Autowired는 @Qualifier를 써서 이름으로 다시 POJO를 찾아야 하는 불편함이 있다.
@Resource는 기능상 @Autowired와 @Qualifier를 합한 것과 같다
2.4.2 @Inject로 POJO 자동 연결하기
@Resource와 @Autowired처럼 @Inject도 일단 타입으로 POJO를 찾는다.
public class SequenceGenerator {
@Inject
private PrefixGenerator prefixGenerator
}
그러나 타입이 같은 POJO가 여럿일 때엔 다른 방법을 사용해야 한다.
@Inject를 이용해 이름으로 자동 연결을 하려면 먼저 POJO 주입 클래스와 주입 지점을 구별하기 위해 커스텀 애너테이션을 작성한다.
@Qualifier
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER, })
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface DatePrefixAnnotation {
}
(이 커스텀 애너테이션에 붙인 @Qualifier는 스프링의 @Qualifier와 다른 애너테이션이다.)
@DatePrefixAnnotation
public class DatePrefixGenerator implements PrefixGenerator{
}
public class SequenceGenerator {
@Inject @DatePrefixGenerator
private PrefixGenerator prefixGenerator
}
'spring' 카테고리의 다른 글
스프링 레시피 CH2.7 프로퍼티 파일에서 로케일마다 다른 다국어 메시지를 해석하기 (0) | 2023.12.14 |
---|---|
스프링 레시피 CH2.6 외부 리소스(텍스트, XML, 프로퍼티, 이미지 파일)의 데이터 사용하기 (1) | 2023.12.12 |
스프링 레시피 CH2.3 POJO 레퍼런스와 자동 연결을 이용해 다른 POJO와 상호 작용하기 (0) | 2023.12.10 |
스프링 레시피 CH2.2 생성자 호출해서 POJO 생성하기 (0) | 2023.12.10 |
스프링 레시피 CH2.1 자바로 POJO 구성하기 (0) | 2023.12.10 |