250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 티스토리챌린지
- objecterror
- 코드트리
- 추상클래스
- 김영한
- ocp
- java
- 스프링컨테이너
- @configuration
- 프록시
- 오버라이딩
- DI
- 서블릿
- HttpServletResponse
- 코드트리조별과제
- 다형성
- 의존관계
- 코딩테스트
- html form
- 오블완
- JSON
- 인터페이스
- 백준
- 스프링
- 테스트코드
- 참조변수
- 싱글톤
- fielderror
- http 메시지 컨버터
- equals()
Archives
- Today
- Total
minOS
의존관계 자동 주입(6) - 애노테이션 만들기 본문
728x90
애노테이션 만들기
@Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안된다. 그래서 다음과 같이 애노테이션을 만들어서 문제를 해결할 수 있다.
애너테이션 정의
package com.example.core.annotation; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import java.lang.annotation.*; @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("mainDiscountPolicy")//@Qualifier만 있어도 될 듯? @Component public @interface MainDiscountPolicy { }
@Qualifier("mainDiscountPolicy") 대신 애노테이션 정의한 거 사용 오타나면 컴파일 오류남
@Component @MainDiscountPolicy public class RateDiscountPolicy implements DiscountPolicy{}
생성자 주입@Component //@RequiredArgsConstructor //final이 붙은 필드값에 대해 생성자를 만들어줌 public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository,@MainDiscountPolicy DiscountPolicy discountPolicy){ this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; }
수정자 주입
public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository ; private final DiscountPolicy discountPolicy; @Autowired public DiscountPolicy setDiscountPolicy(@MainDiscountPolicy DiscountPolicy discountPolicy){ return discountPolicy; }
애노테이션에는 상속이라는 개념이 없다. 이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다.
@Qualifier 뿐만 아니라 다른 애노테이션도 함께 조합해서 사용할 수 있다. 단적으로 @Autowired도 재정의 할 수 있다.
물론 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 유지보수에 혼란을 가중할 수 있다.
728x90
'TIL > 김영한의 스프링 핵심 원리' 카테고리의 다른 글
빈 생명주기 콜백(1) - 빈 생명주기 콜백 시작 (0) | 2024.05.09 |
---|---|
의존관계 자동 주입(7) -조회한 빈이 모두 필요할 때, List, Map (0) | 2024.04.26 |
의존관계 자동 주입(5) - 조회된 빈이 2개 이상일때 문제점과 해결 방법 (0) | 2024.04.22 |
의존관계 자동 주입(4) - Lombok과 최신 트렌드 (2) | 2024.04.18 |
의존관계 자동 주입(3) - 생성자 주입 (0) | 2024.04.16 |