te___ho
NO RULES
te___ho
전체 방문자
오늘
어제
  • 분류 전체보기 (88)
    • My project (27)
      • High Traffic Lab (3)
      • Nanaland in Jeju (8)
      • Univey (3)
      • inflearn_clone? (13)
    • Spring (19)
    • Network & CS (9)
    • Java (1)
    • Front_End (8)
    • Algorithm (11)
    • ETC (6)
    • Scribble (7)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
te___ho

NO RULES

Spring

[Spring] 의존관계 자동 주입 방법 & 옵션 처리 & LOMBOK(롬복)

2022. 8. 1. 15:15

의존관계 자동 주입 방법

의존 관계 자동 주입에는 여러 가지 방법이 존재한다.

  1. 생성자 주입
    지금까지 사용했던 방법이고 요즘은 대부분 이 방법을 사용한다. 생성자의 파라미터로 의존 관계를 주입한다. 컨테이너에 빈이 등록되면 빈의 인스턴스를 변경할 수 없고(불변), 필수로 설정해야 하는 정보가 있을 때 활용한다(필수)는 특징이 있다. 생성자가 1개만 있을 시 @Autowired를 따로 작성해주지 않아도 된다.
    생성자 주입 장점 - 특징이였던 불변은 큰 장점이 된다. 순수 자바 코드로 테스트 코드를 작성할 때 누락된 내용이 있으면 컴파일 오류가 발생하여 오류를 찾기 쉽다. 또한 빈에 등록할 인스턴스를 임의로 new 해서 생성 후 생성자에 집어넣을 수 있다. 마지막으로 final 키워드를 사용할 수 있다. 의존관계가 있는 클래스를 final로 선언 후 생성자를  통해 주입하는데 이때도 잘못 작성한 경우 컴파일 오류를 발생시킬 수 있다. (컴파일 오류는 최고의 오류다.) 그러므로 그냥 생성자 주입 쓰면 된다.
  2. 수정자 주입
    setXXXX, getXXXX 함수를 작성해서 의존 관계를 주입해준다. 선택, 변경이 가능한 특징이 있는데 사용할 경우는 거의 없다. 불변이 제일 안정적이다.
  3. 필드 주입, 일반 메서드 주입 - 이런거 있는데 안 쓰는 게 좋다. 필요한 경우 검색해서 사용하자~

옵션 처리

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

  1.  @Autowired
    @Autowired에는 required라는 옵션이 있는데 default값이 true이다. 주입 대상을 필요로 한다는 뜻이다.
    @Autowired(required = false)로 작성하면 빈이 없어도 된다. 하지만 메서드 자체가 실행조차 되지 않는다.
  2. @Nullable
    빈에 등록되지 않은 매개변수에 @Nullable을 작성해 준다.
  3. Optional <>
    주입할 대상이 없으면 Optional.empty가 입력된다.

출력 값은 noBean2 = null, noBean3 = Optional.empty이다. setNoBean1은 호출되지 않는다. 

 ( 아래 코드는 수정자 주입을 사용하였는데 테스트 결과 생성자 주입에서도 사용 가능하다.)

        @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);
        }

 

 LOMBOK

 롬복은 자바 라이브러리이며 여러 편리 기능을 제공한다. 롬복 라이브러리를 설치한 후 파일에 @getter @setter @toString을 작성하면 우리가 자주 쓰는 메서드들을 바로 사용할 수 있다. 최고다..... @NoArgsConstructor, @RequiredArgsConstructor을 사용하여 생성자도 만들 수 있는데 @RequiredArgsConstructor을 사용하면 final로 작성되어 있는 변수들을 매개변수로 하는 생성자로 만들어 준다. 

 생성자가 하나이면 @Autowired를 사용할 필요가 없으니 간편하게 생성자 주입을 활용할 수 있다.

 

 

https://inf.run/NPt8

 

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

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

www.inflearn.com

 

728x90
반응형
저작자표시 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] 빈 스코프 (프로토타입)  (0) 2022.08.09
[Spring] @Qualifier, @Primary & 빈 생명주기 콜백  (2) 2022.08.06
[Spring] @ComponentScan & @Autowired (의존관계 자동 주입)  (2) 2022.07.26
[Spring] 싱글톤 컨테이너  (1) 2022.07.23
[Spring] 스프링 컨테이너 & 스프링 빈 조회  (4) 2022.07.20

    티스토리툴바