728x90
주입할 스프링 빈이 없어도 동작해야 할 때가 있다.
그래서 오늘 포스팅 주제는 '의존성 주입 옵션 처리'이다.
1. 자동 주입 대상을 옵션으로 처리하는 방법 3가지
- required = false
- @Nullable
- Optional<T>
public class AutoWiredTest {
@Test
void AutoWiredOption(){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
static class TestBean {
//빈으로 등록되지 않은 Member를 주입하는 테스트
@Autowired(required = false)
public void setNoBean1(Member noBean1){
System.out.println("noBean1 = " + noBean1);
}
@Autowired
public void setNoBean2(@Nullable Member noBean2){
System.out.println("noBean2 = " + noBean2);
}
@Autowired
public void setNoBean3(Optional<Member> noBean3){
System.out.println("noBean3 = " + noBean3);
}
}
1. required = false
@Autowired의 기본옵션이 (required = true)다.
아무 옵션없이 빈으로 등록되지 않은걸 주입하려고 하면 에러가 터진다.
required = false로 등록하면 에러가 터지진 않지만 메서드 호출 자체가 안된다.
그래서 위 테스트 코드르 실행해보면 아래와 같이 noBean1을 로그에서 볼 수 없다..!
2. @Nullable
생성자 자동 주입을 할 때, 특정 필드에만 @Nullable을 사용할 수도 있다.
✅예시코드
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Nullable DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
원래 할인정책(discountPolicy)이 null이면 안되지만, 예시로 @Nullable 어노테이션을 붙여봤다.
이런 경우, 할인정책이 null이어도 생성자 자동주입시 오류가 나지 않는다.
3. Optional<T>
Optional<T>는 Java8에서 나온 문법이다.
값이 있을 수도 있고, 없을 수도 있는 객체 T를 감싸는 래퍼 클래스로, null 처리를 더 깔끔하게 처리하고 오류를 방지하기 위한 문법이다.
스프링 컨테이너에 해당 타입 'T'의 빈이 존재하면 Optional.of(빈 인스턴스)로 표현되고
객체가 비어있는 경우, Optional.empty를 반환한다.
728x90
'인프런 김영한 강의 정리 > 스프링 핵심원리 기본편' 카테고리의 다른 글
스프링 핵심 원리 기본편 - 의존관계 자동 주입(4)|조회하는 빈이 2개 이상,해결법, 애노테이션 직접 만들기 (0) | 2024.05.06 |
---|---|
스프링 핵심원리 기본편 - 의존관계 자동 주입(3)|롬복과 최신 트랜드 (0) | 2024.05.06 |
스프링 핵심원리 기본편 - 의존관계 자동 주입(1)|다양한 의존관계 주입방법 (0) | 2024.05.02 |
스프링 핵심원리 기본편 - 컴포넌트 스캔 (0) | 2024.05.01 |
스프링 핵심 원리 기본편 - 싱글톤 패턴과 스프링 컨테이너 (0) | 2024.04.30 |