BackEnd/Spring & Springboot Study

예제로 배우는 스프링 프레임워크 입문 - 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) + "\n"
			+ "owners: " + this.owners;
	}

 

IOC Container를 직접 가져와서 사용, application context의 설정된 값을 비교한 결과

 

동일하다

같은 값이 나오는 것을 볼 수 있다. -> 같은 인스턴스 이다. -> Singleton scope의 객체

객체 하나를 만들어서 재사용

MultiThread상황에서 Singleton scope을 구현하는 것은 번거롭고 조심스러운 일인데

IOC Container를 사용하면 손쉽게 이용할 수 있다.

 

 

https://github.com/devjun63/spring-petclinic/commit/0120bf219d97971b734d67099c413c0dd16908e3

 

IOC Container · devjun63/spring-petclinic@0120bf2

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files IOC Container Loading branch information Showing 2 changed files with 26 additions and 10 deletions. +13 −6 src/main/

github.com

 

참고