IoC (Inversion of Control) 컨테이너
ApplicationContext (BeanFactory)
빈(bean)을 만들고 엮어주며 제공해준다.
빈 설정
- 이름 또는 ID
- 타입
- 스코프
아이러니하게도 컨테이너를 직접 쓸 일은 많지 않다.
@Controller
class OwnerController {
private static final String VIEWS_OWNER_CREATE_OR_UPDATE_FORM = "owners/createOrUpdateOwnerForm";
private final OwnerRepository owners;
private final VisitRepository visits;
private final ApplicationContext applicationContext;
public OwnerController(OwnerRepository clinicService, VisitRepository visits, ApplicationContext applicationContext) {
this.owners = clinicService;
this.visits = visits;
this.applicationContext = applicationContext;
}
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
dataBinder.setDisallowedFields("id");
}
@GetMapping("/bean")
@ResponseBody
public String bean() {
return "bean" + applicationContext.getBean(OwnerRepository.class) + "\n"
+ "owners: " + this.owners;
}
IOC Container를 직접 가져와서 사용, application context의 설정된 값을 비교한 결과
같은 값이 나오는 것을 볼 수 있다. -> 같은 인스턴스 이다. -> Singleton scope의 객체
객체 하나를 만들어서 재사용
MultiThread상황에서 Singleton scope을 구현하는 것은 번거롭고 조심스러운 일인데
IOC Container를 사용하면 손쉽게 이용할 수 있다.
https://github.com/devjun63/spring-petclinic/commit/0120bf219d97971b734d67099c413c0dd16908e3
참고
- https://github.com/spring-guides/understanding/tree/master/application-context
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html
'BackEnd > Spring & Springboot Study' 카테고리의 다른 글
예제로 배우는 스프링 프레임워크 입문 - 의존성 주입 (Dependency Injection) (0) | 2021.12.01 |
---|---|
예제로 배우는 스프링 프레임워크 입문 - Spring Bean (0) | 2021.11.26 |
예제로 배우는 스프링 프레임워크 입문 - IOC (0) | 2021.11.23 |
예제로 배우는 스프링 프레임워크 입문 - 프로젝트 살펴보기 & 과제풀이 (0) | 2021.11.23 |
예제로 배우는 스프링 프레임워크 입문 (0) | 2021.11.23 |