[Spring]

[Spring] DI의 방법

PhoB 2023. 2. 7. 23:52

지난 포스팅에서 DI에 대해서 알아보았다. 그렇다면 이제 의존성 주입을 하는 방법에 대해서 알아보자.

 

 

[Spring] DI (Dependency Injection)

DI Dependency Injection 스프링의 근간을 이루는 중요한 개념 스프링4부터 DI사용을 권장 DI는 비단 스프링만이 사용하는 개념은 아니지만 스프링을 공부함에 있어서 꼭 알아야하는 중요한 개념이다. D

psh0036.tistory.com

 

 

1.생성자 주입 ( Constructor Injection)

  • 말 그대로 생성자를 통해서 의존성을 주입하는 방법
  • 테스트를 용이하게함
  • 생성자가 1개만 존재할 경우 @Autowired 어노테이션 생략가능
  • final키워드 선언 가능
@Service
public class Example {
	private Di1 di_one;
    private Di2 di_two;

    @Autowired //생략가능
    public Example(Di1 di_one,Di2 di_two) {
        this.di_one = di_one;
        this.di_two = di_two;
    }
}

2. 수정자 주입 (setter Injection)

  • 필드값을 변경하는 setter를 통해서 의존성을 주입하는 방식
  • @Autowired 어노테이션 생략 불가능
  • @Autowired로 주입할 객체가 없는 경우 에러발생 - 에러를 발생시키지 않으려면 @Autowired(required = false)로 무시가능
  • final키워드 선언 불가능
@Service
public class Example {
	private Di1 di_one;
    private Di2 di_two;

    @Autowired //생략 불가능
    public void setDi1(Di1 di_one) {
    	this.di_one = di_one;
    }
    @Autowired //생략 불가능
    public void setDi2(Di2 di_two) {
    	this.di_two = di_two;
    }
}

3. 필드 주입(Field Injection)

  • 필드에 바로 의존성을 주입하는 방식
  • 3가지 방법중 가장 권장되지 않는 방식이다.
  • 프레임워크 없이는 작동하지 않는다.
@Service
public class Example {
	@Autowired
	private Di1 di_one;
    
	@Autowired
    private Di2 di_two;
}

 

 


스프링에서 의존성 주입을 해주기전에 앞서 스프링 컨테이너에 bean등록을 해주어야한다.

bean을 등록하는 방법에에는

1. 직접 context파일에 bean을 등록해주는 방법

2. Annotation을 이용하는 방법(ex. @Bean , @Component 등등의 어노테이션이 있다.)