제어권이 역전된 것
말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
① 객체 생성
② 의존성 객체 생성
: 클래스 내부에서 생성
③ 의존성 객체 메소드 호출
class OrderController {
private OrderRepository repository = new OrderRepository();
}
의존성에 대한 제어권을 개발자가 만들어서 자기가 가지고 있음
① 객체 생성
② 의존성 객체 생성
: 스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입
③ 의존성 객체 메소드 호출
class OrderController {
private final OrderRepository repo;
public OrderController(OrderRepository repo) {
this.repo = repo;
}
}
객체를 생성하고, 객체간의 의존성을 이어주는 역할
Bean Factory, Application Context (Bean Factory 상속)
이름 | 설명 |
---|---|
Bean Factory | IOC 컨테이너의 기능을 정의하고 있는 인터페이스 Bean의 생성 및 의존성 주입, 생명주기(lifecycle) 관리 등의 기능을 제공 |
Application Context | BeanFactory 상속 BeanFactory가 제공하는 기능 외에 AOP, 메세지처리, 이벤트 처리 등의 기능을 제공 |
@Controller
class OwnerController {
private final OwnerRepository owner;
// IOC 컨테이너가 ownerRepository 를 찾아서 넣어줌
public OwnerController(OwnerRepository ownerRepository) {
this.owner = ownerRepository;
}
}
@Autowired
ApplicationContext applicationContext;
@Test
public void getBean() {
// applicationContext 에 들어있는 모든 bean 이름 리턴
applicationContext.getBeanDefinitionNames();
// 파라미터로 bean class 넘기면 됨
applicationContext.getBean(OrdersController.class);
}