의존성을 주입하는 방법
우선 등록된 빈을 사용하기 위한 스프링 프레임워크 DI 방법은 3가지다.
1.생성자 주입(Constructor Injection), 2.필드주입(Filed Injection) , 3.수정자 주입(Setter Injection)
1.생성자 주입(Constructor Injection)
@Controller
public class MemberController {
//final로 선언 할 수 있다.
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
}
클래스의 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 @Autowired를 생략 할 수 있다.
필드주입(Filed Injection)
@Component
public class MemberController {
@Autowired
private MemberService memberSerivce;
}
가장 간단한 방법이다. @Autowired 어노테이션만 붙여주면 자동으로 의존성이 주입된다.
수정자 주입(Setter Injection)
@Component
public class MemberController {
private MemberSerivcfe memberService;
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
}
수정자(Setter)를 이용한 주입 방법도 있다. 꼭 setter 메서드일 필요는 없으며, 메서드 이름이 수정자 네이밍 패턴이 아니어도 동일한 기능을 하면 된다.
정리하면
동일한 의존성 주입 방법 중 생성자 주입 방법의 사용이 권장된다.
- 순환 참조를 방지할 수 있다.
- 순환 참조가 발생하는 경우 애플리케이션이 구동되지 않는다.
- 테스트 코드 작성이 편리하다.
- 단순 POJO를 이용한 테스트 코드를 만들 수 있다.
- 불변하다.
- 실행 중에 객체가 변하는 것을 막을 수 있다.
- 오류를 사전에 방지할 수 있다.
'Programming > Back-end Language' 카테고리의 다른 글
[JAVA] 쓰레드 풀(Thread Pool)란? (0) | 2022.04.13 |
---|---|
[Spring] Test 코드를 작성해야 하는 이유/방법 (0) | 2022.04.13 |
[JAVA] AOP란 무엇일까? (0) | 2022.03.28 |
[Spring] @ResponseBody은 무엇일까? (0) | 2022.03.28 |
[Spring]Failed to load resource: the server responded with a status of 404 () 오류 해결 방법 (0) | 2022.03.24 |