Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

8. 스프링(Spring)에서의 의존성 주입(DI, Dependency Injection) 방법 본문

K-DigitalTraining 강의/11. Spring

8. 스프링(Spring)에서의 의존성 주입(DI, Dependency Injection) 방법

이대곤 2022. 8. 23. 19:41

스프링에서의 의존성 주입(DI, Dependency Injection) 

* 스프링에서도 다음과 같은 방식으로  DI를 구현한다.

1) 생성자를 이용한 주입

2) setter 메소드를 이용한 주입

3) @Autowired 어노테이션을 이용한 주입

 

다만, 순수 Java 코드와 다르게 스프링에서는 직접 생성자 혹은 setter 메소드를 호출하지 않으며

이를 대신해 XML이나 어노테이션을 이용해 호출되도록 한다

 

ex) @Autowired 어노테이션을 이용한 주입(수업시간에 주요하게 사용했던 방식)

아래의 게시글에서 하단의 'Spring Bean Configuration XML 파일 작성방법 Case2' 를 참고하면 된다.

https://ldgeao99-developer.tistory.com/537

 

8. 스프링(Spring), 자동으로 생성 및 관리되게할 객체를 등록하는 Spring Bean Configuration XML 파일 생성

* 아래서 'Spring Bean Configuration XML 파일 작성방법 Case2'  어노테이션 @Component와 @Autowired, @Qualifier 를 이용한 DI(의존성 주입) 방식을  프로젝트에서 적용하게 될거 같다. * 아래에서 Main 클..

ldgeao99-developer.tistory.com

 

ex) 묵시적 자동주입(=생성자를 이용한 주입)

package org.zerock.sample;

import org.springframework.stereotype.Component;

import lombok.Getter;
import lombok.ToString;

@Component
@ToString
@Getter
public class SampleHotel{
	
    private Chef chef;
    
    /*
    스프링 4.3 이후부터 제공되는 기능인데
    이 방식은 생성자를 통한 묵시적 주입 방식으로
    참조변수를 주입하는 생성자를 만들어놓고 @Component 어노테이션을 붙여주면
    @Autowired 어노테이션 없이 주입이 처리된다.
    */
    
    public SampleHotel(Chef chef){ 
    	this.chef = chef;
    }
}

 

ex) 어노테이션을 이용한 setter 메소드를 이용한 주입 예시

- @Data : @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 

                어노테이션입니다.(Lombok의 기능)

- @Component : 스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상임을 표시하는 기능, (스프링빈 등록)

- @Setter : 자동으로 해당 멤버변수에 필요한 setter메소드 setChef()을 컴파일시 생성해주는 기능.(Lombok의 기능)

- @Autowired : 스프링빈에 등록된 객체중 적절한 객체를 주입해주는 기능.

package org.zerock.sample;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component
@Data
public class Chef{

}
package org.zerock.sample;

import org.springframework.beans.factory.annotaion.Autowired;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component
@Data
public class Restaurant{
	
    @Setter(onMethod = @Autowired)
    private Chef chef;
}
Comments