on
예제로 배우는 스프링 프레임워크 입문 - IOC Container
예제로 배우는 스프링 프레임워크 입문 - IOC Container
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) + "
" + "owners: " + this.owners; }
IOC Container를 직접 가져와서 사용, application context의 설정된 값을 비교한 결과
동일하다
같은 값이 나오는 것을 볼 수 있다. -> 같은 인스턴스 이다. -> Singleton scope의 객체
객체 하나를 만들어서 재사용
MultiThread상황에서 Singleton scope을 구현하는 것은 번거롭고 조심스러운 일인데
IOC Container를 사용하면 손쉽게 이용할 수 있다.
https://github.com/devjun63/spring-petclinic/commit/0120bf219d97971b734d67099c413c0dd16908e3
참고
from http://devjun.tistory.com/234 by ccl(A) rewrite - 2021-11-25 01:27:49