Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
01-09 18:44
- Today
- Total
Tags
- 의존관계 주입
- RequiredArgsConstructor
- 라즈베리파이4
- springsecurity
- 롬복 Qualifier
- Autowired 옵션
- 싱글톤 컨테이너
- docker
- 라즈베리파이
- 객체지향
- DI
- 스프링 Configuration
- beandefinition
- 스프링
- ComponentScan
- 도커
- autowired
- qualifier
- UsernamePasswordAuthenticationFilter
- 스프링 컨테이너
- Spring interceptor
- Servlet Filter
- 스프링 빈
- 스프링 빈 조회
- DI컨테이너
- HandlerMethodArgumentResolver
- 스프링 싱글톤
- 생성자 주입
- Spring
- 빈 중복 오류
Archives
그날그날 공부기록
Qualifier을 대체할 수 있는 커스텀 애노테이션 만들기 본문
@Qualifier(”빈 이름")
을 통해 필드와 빈을 매칭 할 수 있다.
하지만 컴파일시 타입이 체크되지 않는다.
이 경우 직접 @Qualifier(”빈 이름")
을 포함하는 애노테이션을 직접 만들어 사용하면 해결할 수 있다.
자바 인터페이스 파일을 생성하여 @를 붙여주거나
클래스 파일을 하나 생성하여 public class
→ public @interface
로 바꿔준다.
@Qualifier
를 대체할 애노테이션을 만들어야 하므로 ⌘ + O 단축키로 @Qualifier
를 검색하여 원래 있던 애노테이션을 복사하여 추가한다.
그 후 기존에 @Qualifier(”빈 이름")
으로 매칭해주었던 애노테이션을 추가해준다.
최종 코드는 다음과 같다.
//@Qualifier에 있던 애노테이션 시작
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
//@Qualifier에 있던 애노테이션 끝
@Qualifier("rate")
public @interface MainDiscountPolicy {}
이렇게 @MainDiscountPolicy
라는 애노테이션을 만들었다.
이제 기존에 사용하였던 @Qualifier
를 대신해 사용하면 된다.
//할인 정책을 결정하는 빈
@Component
@MainDiscountPolicy //기존 @Qualifier("rate")
public class RateDiscountPolicy implements DiscountPolicy{
//할인 정책을 주입받아 사용하는 서비스
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
//기존 @Qualifier("rate")
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy){
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
이렇게 사용한다면 만약 매칭 하는 부분의 철자가 틀렸을 경우 컴파일 시점에 에러가 발생하기 때문에 오류를 찾기 수월해진다.
얼핏 보면 애노테이션을 상속받아 사용하는 것 같지만 애노테이션에는 상속이라는 개념이 없다고 한다.
단지 스프링이 여러 애노테이션을 묶어서 사용하는 기능을 제공해주는 것이다.
적절하게 사용하면 코드의 가독성도 올라가고 해당 애노테이션을 통해 검색을 하는 등 여러 장점이 있을 것 같지만
막 사용한다면 직접 정의한 파일이 많아지고 서로 공유하며 작업하는데 혼란을 가져올것 같다.
출처
'Spring 공부' 카테고리의 다른 글
빈 생명주기, 콜백 이용하기 (0) | 2022.08.16 |
---|---|
Map, List에 빈 주입 & 사용하기 (0) | 2022.08.09 |
스프링 빈 중복 시 오류 & 해결방법 (0) | 2022.08.02 |
lombok(롬복) 설치 & 적용하기 (0) | 2022.08.02 |
왜 생성자 주입 방식을 선택해야 할까? (0) | 2022.07.28 |
Comments