Back-End/Spring

[Spring][스프링 기본편] - 21. 옵션 처리(의존관계 주입)

얄루몬 2022. 1. 28. 10:21

[옵션 처리란?]

의존관계 주입 시 스프링 빈에 의존관계 등록이 제대로 되지 않는 경우가 있다. 그러나 우리는 계속해서 프로그램 작동을 시켜야 할 때도 있다. 그렇게 하기 위해서는 옵션 처리를 해주어야 할 경우가 생긴다. 그 경우에 대비해서 옵션처리 하는 방법을 알아보고자 한다.

 

 

 

[옵션처리의 3가지]

  • @Autowired(required = false)
    • 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨
  • @Nullable
    • 자동 주입할 대상이 없으면 null이 입력된다.
  • Optional<>
    • 자동 주입할 대상이 없으면 Optional.empty 가 입력된다.

 

 

 

[옵션 처리한 코드]

package hello.core.autowired;

import hello.core.member.Member;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.lang.Nullable;

import java.util.Optional;

public class AutowiredTest {

    @Test
    void AutowiredOption(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);

    }
    static class TestBean{

        //required - 기본값 true
        //의존관계가 없이도 작동하게 하기 위해서 수정자 자체를 호출하지 않게 함.
        @Autowired(required = false)
        public void setNoBean1(Member member1){
            System.out.println("member1 = " + member1);
        }

        //호출은 되는데 대신 null로 들어온다.
        @Autowired
        public void setNoBean2(@Nullable Member member2){
            System.out.println("member2 = " + member2);
        }

        //java8에서 제공하는 optional이라는 기능 자동주입 대상이 없으면 Optional.empty가 됨
        @Autowired
        public void setNoBean3(Optional<Member> noBean3){
            System.out.println("noBean3 = " + noBean3);
        }
    }

}

 

[참고]

@Nullable, Optional은 스프링 전반에 걸쳐서 지원된다. 예를 들어서 생성자 자동 주입에서 특정 필드에만 사용해도 된다

 

 

[출처]

https://inf.run/7GX1

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com