Spring 의존관계 주입(DI) 방법 4가지
스프링의 의존관계 주입
스프링은 컴포넌트 스캔을 통해 Bean을 자동으로 생성하고 스프링 컨테이너에 해당 Bean들을 저장하여 관리한다.
Bean들을 자동으로 생성할 때 스프링 내부에서 자동으로 의존관계들을 주입하는 4가지 방법이 있다. 알아보자!
1. 생성자(constructor) 주입
생성자를 통해 의존관계를 주입하는 방법이다.
의존관계가 불변이거나, 필수 의존관계에 사용하면 좋다.
@Component
public class TestServiceImpl implements TestService{
private final TestRepository testRepository;
private final TestPolicy testPolicy;
@Autowired //생성자가 1개일 경우 생략 가능
public TestServiceImpl(TestRepository testRepository, TestPolicy testPolicy) {
this.testRepository = testRepository;
this.testPolicy = testPolicy;
}
}
생성자가 1개일 경우 @Autowired를 생략 할 수 있다.
lombok을 사용 할 경우 @RequiredArgsConstructor를 통해 코드를 더 간단히 할 수 있다.
@Component
@RequiredArgsConstructor
public class TestServiceImpl implements TestService{
private final TestRepository testRepository;
private final TestPolicy testPolicy;
}
2. 수정자(setter) 주입
수정자(setter)를 통해 의존 관계를 주입하는 방법이다.
의존관계가 선택적으로 주입되거나, 변경 가능성이 있는 의존관계에 사용하면 좋다.
setter를 public으로 열어두어야 하기 때문에 누군가 변경 할 여지가 있어서 좋은 방법은 아니다.
@Component
public class TestServiceImpl implements TestService{
private TestRepository testRepository;
private TestPolicy testPolicy;
@Autowired
public void setTestRepository(TestRepository testRepository) {
this.testRepository = testRepository;
}
@Autowired
public void setTestPolicy(TestPolicy testPolicy) {
this.testPolicy = testPolicy;
}
}
만약 스프링 프로젝트를 시작할 때 주입할 대상없이 일단 동작하게 하려면 '@Autowired(required = false)'로 지정해주면 된다
3. 필드 주입
필드에서 바로 주입하는 방법이다.
코드가 간결하여 사용하기는 편하지만, 외부에서 변경이 불가능하여 테스트하기 어렵다.
추가로 DI 프레임워크가 없으면 아무것도 할 수 없다는 단점이 있다.
있다는 것만 알아두고 사용하지 말자. (Test할때는 사용해도 OK)
@Component
public class TestServiceImpl implements TestService{
@Autowired
private TestRepository testRepository;
@Autowired
private TestPolicy testPolicy;
}
4. 일반 메서드 주입
일반 메서드를 통해 주입하는 방법이다.
일반적으로 사용하지 않는다.
참고로만 알아두고 사용하지 말자.
@Component
public class TestServiceImpl implements TestService{
private TestRepository testRepository;
private TestPolicy testPolicy;
@Autowired
public void init(TestRepository testRepository, TestPolicy testPolicy) {
this.testRepository = testRepository;
this.testPolicy = testPolicy;
}
}
내용 출처 : https://www.inflearn.com/users/@yh
Author And Source
이 문제에 관하여(Spring 의존관계 주입(DI) 방법 4가지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yebali/DI-주입-방법-3가지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)