관리 메뉴

공부 기록장 💻

[Spring] @Autowired를 통한 의존 관계 주입 시 주입할 스프링 빈이 없는 경우 처리하는 방법 본문

# Tech Studies/Java Spring • Boot

[Spring] @Autowired를 통한 의존 관계 주입 시 주입할 스프링 빈이 없는 경우 처리하는 방법

dream_for 2023. 2. 3. 15:18

인프런 - 스프링 핵심 원리 기본편 정리


 

@Autowired 를 이용하여 스프링 빈의 의존 관계를 자동으로 주입하는 방법들에 대해 배웠다.
생성자를 통해 의존 관계를 주입하는 경우, 스프링 빈으로 필수적으로 등록되어야 한다는 전제가 있었지만,
setter와 같은 수정자 또는 메서드를 사용하여 DI 수행 시, 주입할 스프링 빈이 없어도 동작이 가능하다.

주입할 스프링 빈이 없어도 동작할 수 있도록 옵션을 처리하는 방법들에 대해 학습해보자.


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

스프링 빈으로 등록되어 있지 않은 의존 관계를 옵션으로 처리하는 방법에는 다음과 같이 3가지가 있다.

  1. @Autowired(required=false): 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출되지 않음
  2. org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null 이 입력됨
  3. Optional<클래스> : 자동 주입할 대상이 없으면 Optional.empty 가 입력됨




다음과 같이 AutowiredTest 에 TestBean 이라는 static class를 만들어, 인자로 Member 객체를 받는 3가지 메서드를 다음과 같이 작성하고 AutowiredOption 테스트 코드를 실행해보자.
(이 때, Member 클래스는 스프링 빈으로 등록되어 있지 않은 클래스이다. AutowiredOption에서 ApplicationContext를 통해 스프링 컨테이너를 생성하고, TestBean을 자동적으로 스프링 빈으로 등록한다.)

1. setNoBean1()

  • @Autowired(required=false) 를 지정한다. true가 디폴트 값인 required 값을 false로 변경하여 자동 주입할 대상이 없는 경우를 처리할 수 있게 된다.

 

2. setNoBean2()

  • Member 클래스 앞에 @Nullable을 추가하여, 주입할 대상이 없는 경우 null 값으로 처리한다.


3. setNoBean3()

  • Member 클래스를 Optional로 감싸, 주입할 대상이 없는 경우 Optional.empty 로 처리한다.

 


테스트 코드를 실행해보면, 다음과 같이 setNoBean1() 메서드는 실행되지 않아 결과값이 나타나지 않았으며, 나머지 두 메서드의 결과는 위에 예상한 결과로 출력된 것을 확인할 수 있다.

728x90
반응형
Comments