4. Inversion of Control
Inversion of Control : 제어권이 역전된것
의존성을 관리하는 것은 owner가 하는것이 아니라 밖에서 함
OwnerController에서 OwnerRepository 없이 instance를 못만들음
즉, OwnerController는 OwnerRepository의 인스턴스를 사용
스프링이 bean들의 객체를 관리. 의존성 관리
5. IoC 컨테이너
beanFactory가 IoC 컨테이너
ApplicationContext 또한 bean Factory를 상속받기 때문에 Ioc 컨테이너
어노테이션 등으로 등록된 bean들은 서로간에 의존성주입을 IoC 컨테이너가 해줌
의존성 주입은 bean끼리만 가능
OwnerController와 OwnerRepository 모두 bean
6. bean
bean은 객체인데 IoC 컨테이너가 관리하는 객체
직접 생성한 객체는 의존성 주입이 안됨
1. Component scan
Component, Controller 에노테이션으로 bean등록
Repository는 특정한 에노테이션이 없더라도 bean으로 등록
2. 직접 등록
자바설정파일에서 Bean 에노테이션을 이용하여 등록
AutoWired 에노테이션을 이용하여 주입받아서 사용할 수 있음
7. 의존성 주입
어떤 클래스에 생성자가 하나뿐이고 그 생성자가 주입받는 레퍼런스 변수들이 bean으로 등록되어있다면 bean으로 자동 등록. =>4.3 이상부터. 따라서 AutoWired 에노테이션 생략 가능
스프링에서는 생성자를 사용하는 방법을 추천
생성자를 사용하면 좋은이유는 필수적으로 사용하는 레퍼런스 없이는 인스턴스를 사용하지 못하도록 강제할 수 있다.
*OwnerController에 PetRepository 주입하기
1. 에노테이션을 이용하기
2. 생성자를 이용하기
3. setter이용해서 주입받기
8. AOP
구현 방법
1. 컴파일 이용
A.java -------(AOP)-------->A.class
2. 바이트 코드 조작
A.java ->A.class-------(AOP)------> 메모리
3. 프록시 패턴(스프링 AOP)
9. PSA(Portable Service Abstraction)
psa는 잘 만든 인터페이스
GetMapping, PostMapping => 요청과 관련하여 요청을 메소드가 처리하도록
스프링 웹 MVC
@Controller | @RequestMapping | ...
Servelet , Reactive 둘중으로 코딩할수 있음
스프링 트렌젝션
@Transaction을 붙이면 트렌젝션 처리가 됨