SpringBean Annotations
✅ Bean이 null인 경우 처리 방법
- to make bean null
@Autowired
히고- SpringBean을 넣을지, 안 넣을지 정할 수 있다
💡 Required = false
Member
이null
이면setter
을 호출하지 않음
1
2
3
@Autowired(required = false)
public void setNoBean1(Member member1){
}
💡 @Nullable
Member
이null
이면null
이라고 출력
1
2
3
@Autowired
public void setNoBean2(@Nullable Member member2){
}
💡 Optional<>
Optional<>
로 감싸면 객체가null
일 수 있음Member
이null
이면Optional.empty
로 출력
1
2
3
@Autowired
public void setNoBean3(Optional<Member> member3){
}
✅ 같은 타입의 Bean이 여러 개 있을 때 우선순위
To choose one bean out of several
- If there are two
DiscountPolicy
FixedDiscountPolicy
RateDiscountPolicy
- I want to choose what
DiscountPolicy
bean to create
💡 @Autowired field name
- 필드명을 빈 이름으로 변경
1
2
3
4
5
6
7
//before
@Autowired
private DiscountPolicy discountPolicy
//after
@Autowired
private DiscountPolicy rateDiscountPolicy //구체적인 이름 적기
- DI할 때 구체적인 이름 적어서 의존성 주입
1
2
3
4
public OrderServiceImpl(MemberRepository repository, DiscountPolicy rateDiscountPolicy) {
this.repository = repository;
this.discountPolicy = rateDiscountPolicy;
}
💡 @Qualifier
@Qualifier
: 추가 구분자- 빈 등록 시 각 구체 클래스에
@Qualifier
이름 지정 - 제일 우선순위가 높다
1
2
3
4
5
6
7
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy {}
- 이후 어떤 빈을 DI할지 결정
1
2
3
4
public OrderServiceImpl(MemberRepository repository, @Qualifier("fixDiscountPolicy") DiscountPolicy discountPolicy) {
this.repository = repository;
this.discountPolicy = discountPolicy;
}
💡 @Primary
- 빈 간의 우선순위 지정
- 이렇게
@Primary
붙이면RateDiscountPolicy
가 주입된다
1
2
3
@Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy{}
✅ Create my own annotation
- can also create my annotation
1
2
3
4
5
6
7
8
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier("mainDiscountPolicy")
public @interface MainDiscountPolicy {
}
- use my own
MainDiscountPolicy
annotation
1
2
3
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy{
✅
✅
✅
✅
✅
✅
✅
This post is licensed under CC BY 4.0 by the author.