나의 브을로오그으

#7-2. [스프링 핵심 원리-기본편] - 옵션 처리 본문

Spring

#7-2. [스프링 핵심 원리-기본편] - 옵션 처리

__jhp_+ 2022. 7. 27. 08:28

옵션 처리

주입할 스프링 빈이 없어도 동작해야 할 때가 있다.

그런데 @Autowired만 사용하면 required옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다.

 

- 자동 주입 대상을 옵션으로 처리하는 방법

* @Autowired(required = false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨.

* org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null 입력

* Optional<> : 자동 주입할 대상이 없으면 Optional.empty가 입력됨.

@Autowired(required = false)
public void setNoBean1(Member member) {
  System.out.println("setNoBean1 = " + member);
}

//null 호출
@Autowired
public void setNoBean2(@Nullable Member member) {
  System.out.println("setNoBean2 = " + member);
}

//Optional.empty 호출
@Autowired(required = false)
public void setNoBean3(Optional<Member> member) {
  System.out.println("setNoBean3 = " + member);
}

1번째 required = false의 경우 만약 인자로 들어온 객체가 스프링 빈으로 등록되어있지 않다면, 이 setter 메서드 자체가 호출되지 않음.

2번째는 호출은 되는데, member가 스프링 빈으로 등록되어 있지 않으므로 오류가 나야 하지만, @Nullable애노테이션이 있기 때문에 호출은 되지만 null로 들어온다.

3번째는 자바8부터 추가된 문법으로 스프링 빈으로 등록되어 있다면 Optional로 감싸서 들어오고, 아니면 Optional.empty()로 들어온다.(null)

 

※ Member는 스프링 빈이 아니다!!!!!!!!

// 출력결과
nobean2 = null
nobean3 = Optional.empty