공부할 때 본 강의
https://www.youtube.com/watch?v=IVzYerodIyg&list=PLfI752FpVCS8_5t29DWnsrL9NudvKDAKY&index=8
Dependency Injection = 의존성 주입
의존성을 주입받는 방법 = 서로 다른 객체가 서로 참조하는 방법
의존성 주입에 사용되는 어노테이션
@Autowired
- 생성자, 필드, Setter에 모두 사용이 가능합니다.
@Inject
의존성 주입 방법은 3가지가 있다고 합니다.
1. 필드에 의존성을 주입한다.
-@Autowired를 붙여줘야 합니다.
- 주입받을 객체는 Bean으로 등록이 되어 있어야 합니다.
- 각 객체가 서로 인스턴스를 만든 다음에 의존성을 주입할 수 있으므로, 상호참조하는 문제를 해결할 수 있다.
2. Setter로 의존성을 주입받는다.
- 주입받을 객체는 Bean으로 등록이 되어 있어야 합니다.
- 각 객체가 서로 인스턴스를 만든 다음에 의존성을 주입할 수 있으므로, 상호참조하는 문제를 해결할 수 있다.
3. 생성자에 의존성을 주입한다.
- 상호참조 해결 안됨.
- Spring 4.3버전 이상부터는 클래스에 생성자가 하나뿐이고, 생성자가 참조하는 객체가 빈으로 등록이 되어 있다면, @Autowired어노테이션 없이 의존성을 주입받을 수 있다고 합니다.
추천되는 방법은?
생성자로 주입하는 방식이 추천되는 방식이라고 합니다.
주입받는 객체가 필요로하는 의존성 객체가 있어야만 한다는 강제성이 생기기 때문입니다. 필드와 setter를 이용해서 의존성을 주입하게 될 경우, 주입받는 객체는 의존성 객체가 없이도 생성자를 만들 수 있기 때문에 의존성에 문제가 생겨도 애플리케이션은 동작할 수 있습니다.
과제.
OwnerController에 PetRepository주입하기
public interface PetRepository extends Repository<Pet, Integer>{
...
}
//1. 생성자로 주입받는 법
@Controller
class OwnerController{
private final PetRepository petRepository;
public void OwnerController(PetRepository pet){
this.petRepository = pet;
}
}
//2. 필드로 주입받는 법.
@Controller
class OwnerController{
@Autowired
private PetRepository petRepository; //final을 안쓰는 이유는 final을 사용하면 인스턴스를 초기화 해주는 값이 반드시 필요한데, 여기선 petRepository에 대해서 초기화가 필요가 없어서 그렇다.
}
//3. Setter로 주입받는 법.
@Controller
class OwnerController{
private PetRepository petRepository;
@Autowired
public void setPetRepository(PetRepository petRepository){
this.petRepository = petRepository;
}
}
'spring' 카테고리의 다른 글
[spring]에러해결-TooManyResultsException (0) | 2020.04.16 |
---|---|
[Spring]MVC 모델2 구조 개발 에러 Mapped Statements collection (0) | 2020.04.03 |
[Spring]spring에서 properties 사용하기 (1) | 2020.04.01 |
[MacBook]Spring Legacy 프로젝트 생성하고 Tomcat 서버 세팅하기 (6) | 2020.03.28 |
[MacBook]초간단 MacBook에 STS 설치하기 (2) | 2020.03.28 |
댓글