토비의 스프링 설명
- 스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된
컨테이너
가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서IoC
라고 부른다. 그래서 스프링 컨테이너를IoC 컨테이너
라고도한다.- 스프링 컨테이너는 단순한 DI 작업 보다 더 많은 일을 한다. DI를 위한 빈 팩토리에 엔터프라이즈 애플리케이션을 개발하는 데 필요한 여러 가지 컨테이너 기능을 추가한 것을
애플리케이션 컨텍스트
라고 부른다.- 스프링의 빈 팩토리와 애플리케이션 컨텍스트는 각각 기능을 대표하는
BeanFactory
와ApplicationContext
라는 두 개의 인터페이스로 정의되어 있다. ApplicationContext 인터페이스는 BeanFactory 인터페이스를 상속한 서브인터페이스다.- 실제로 스프링 컨테이너 또는 IoC 컨테이너라고 말하는 것은 바로 이 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트다.
IoC 컨테이너
는 스프링에서 개발자 대신 Bean
을 생성하고 관리하는데, 이 때 Bean에 해당되는 객체를 등록해야한다.
IoC 컨테이너
와 Bean
에 대해 좀더 알아보자.
IoC 컨테이너
를 위해 필요한 두가지가 있다.
POJO
(Plain Old Java Object) 클래스(추후에 정리)
토비의 스프링 설명
객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트
설정 메타 정보
설정메타 정보
- IoC 컨테이너가 POJO 클래스를 제어할 수 있도록 적절한 메타 정보를 제공해야한다.
- 스프링에서 이 메타정보는 BeanDefinition 인터페이스로 표현된다.
POJO
를 따르는 클래스를@Bean
어노테이션으로 스프링에 알려주면BeanDefinition
을 따르는 형태로 바꾸어 컨테이너에 저장하는 것이다.- 이 형태로 바꾸어주는 것이
BeanDefinitionReader
인터페이스 이다.BeanDefinition 메타 정보
- 빈아이디, 이름, 별칭 : 빈오브젝트를 구분 할 수 있는 식별자
- 클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보
- 스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위
프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름- 생성자 파라미터 값 또는 참조 : DI에 사용할 생성자 파라미터 이름과 값 또는 참조할 빈의 이름
- 지연된 로딩 여부, 우선 빈 여부, 자동와이어링 여부, 부모 빈 정보, 빈팩토리 이름 등
간단한 예시로 빈을 불러 올 때 위 정보를 사용하는데, 아래의 userDao는 빈 아이디, UserDao.class는 클래스이다.
context.getBean("userDao", UserDao.class)