-
(스프링 기본) 19 - 옵션 처리개발/Spring 2024. 10. 28. 10:46
스프링 빈이 없어도 동작해야 할 때가 있다.
@Autowired 만 사용하면 required 옵션 기본값이 true 여서
자동 주입 대상이 없으면 오류가 발생한다.
즉 스프링 컨테이너에 빈이 등록되지 않고 자동 주입 대상이 없어도
동작해야 할 때 아래와 같이 처리하면 된다.
1. @Autowired(required=false) : 자동 주입 대상이 없으면 수정자 메서드(setter) 자체 호출 안됨
2. org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null 이 입력
3. Optional<> : 자동 주입할 대상 없으면 Optional.empty 입력
※ 자바 8의 Optional 로, 상태 있을 수도 있고 없을 수도 있다는 상태를 Optional 로 감싼 것이다.
public class AutowiredTest { @Test void AutowirtedOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);//springBean으로 등록 } static class TestBean { @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); } }
첫 번째 처럼 required = false 를 하게 되면 오류는 안나지만 메서드 자체가 아예 호출 안된다.
@Nullable 호출은 하되 없으면 null
Optional<> 은 없으면 Optional.empty 출력된다.
※ 여기서 Member 는 스프링 빈이 아니다.
출처 : 김영한 스프링 핵심 원리 - 기본편
'개발 > Spring' 카테고리의 다른 글
(스프링 기본) 21 - 롬복 사용하기 (@Getter, @Setter + 생성자 주입 깔끔하게 넣기) (0) 2024.10.28 (스프링 기본) 20 - 생성자 주입 선택해야 하는 이유 (1) 2024.10.28 (스프링 기본) 18 - 다양한 의존관계 주입 방법 (생성자, 수정자, 필드, 일반 메서드) (0) 2024.10.28 (스프링 기본) 17 - 컴포넌트 스캔 (0) 2024.10.24 (스프링 기본) 16 - @Configuration과 싱글톤 (바이트코드 조작) (0) 2024.10.24