Spring Boot

[Spring] @Autowired 자동 주입할 대상이 없을 때

HEY__ 2022. 7. 15. 01:02
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

⛅️ 자동 주입할 대상이 없을 때

@Autowired를 통해 의존 관계 주입을 설정했지만 주입할 스프링 빈이 없어도 동작해야 할 때가 있다.

이 때, @Autowired만 사용하면 자동 주입 대상이 없기 때문에 오류가 발생한다.

 

세 가지 방법을 통해 자동 주입할 대상이 없어도 오류가 발생하지 않도록 처리할 수 있다.

 


⛅️ @Autowired(required=false)

@Autowired의 required 기본값은 true이기 때문에 자동 주입 대상이 없으면 오류가 발생한다.

 

required 값을 false로 설정하면 자동 주입할 대상이 없어도 오류가 발생하지 않는다.

더 정확히는 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출되지 않는다. 따라서 오류가 발생하지 않는다.

 

// 호출이 되지 않음.
@Autowired(required = false)
public void setNoBean1(Member member) {
	System.out.println("setNoBean1 = " + member);
}

 

 


⛅️ org.springframework.lang.@Nullable

@Nullable을 사용하면 자동 주입할 대상이 없을 때 null을 입력한다.

의존 주입할 대상의 앞에 @Nullable을 붙인다. 

 

Member 객체가 스프링 컨테이너에 없기 때문에 null이 입력될 것이다.

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

 

 


⛅️ Optional<>

Optional<T>는 값이 null이 될 수 있을 때, 이 값을 감싸는 Wrapper 클래스로써 null값이 나와도 NullPointException이 발생하지 않는다.

 

의존 관계 주입을 받고 싶은 대상을 Optional로 감싸면 된다.

밑의 경우에는 Member가 스프링 빈으로 등록되지 않기 때문에 Member를 의존관계주입하려고 하면 Optional.empty가 입력될 것이다.

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

 

 

 

728x90