자바빈 또는 엔터프라이즈 자바빈(EJB)에서 말하는 빈과 비슷한 오브젝트 단위의 애플리케이션 컴포넌트
스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트
빈 팩토리(bean factory)란?
빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트
보통 빈 팩토리를 확장한 애플리케이션 컨텍스트(IoC 방식에 따라 만들어진 빈 팩토리)를 사용한다.
빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점
애플리케이션 컨텍스트(Application context)란?
빈 팩토리와 동일하나 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC엔진이란 의미가 부각됌
별도의 정보를 참고해 빈(object)의 생성, 관계설정 등의 제어 작업을 총괄
별도의 설정정보를 담고 있는 무엇인가를 가져와 이를 활용하는 범용적인 IoC 엔진
DaoFactory를 사용하는 애플리케이션 컨텍스트
@Configuration
스프링이 빈 팩토리를 오브젝트 설정을 담당하는 클래스라고 인식하게 하는 어노테이션
수동으로 스프링 컨테이너에 빈을 등록하기 위해 사용됌
@Bean
오브젝트 생성을 담당하는 IoC용 메소드
메소드 이름으로 빈 이름이 결정되므로 중복된 빈 이름이 존재하지 않도록 주의
개발자가 직접 제어가 불가능한 라이브러리를 활용시 사용
유지보수성을 높이기 위해 애플리케이션 전범위적으로 사용되는 클래스를 등록시 사용
다형성을 활용하여 여러 구현체를 등록해주어야 할때 사용
Example Code
스프링 빈 팩토리가 사용할 설정정보를 담은 DaoFactory 클래스
@Configuration // -> 애플리케이션 컨텍스트 또는 빈 팩토리가 사용할 설정정보라는 표시
public class DaoFactory {
@Bean // 오브젝트 생성을 담당하는 IoC용 메소드라는 표시
public UserDao userDao() {
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker() {
return new DConnectionMaker();
}
}
Example Code
애플리케이션 컨텍스트를 적용한 UserDaoTest
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException{
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
}
}
2. 애플리케이션 컨텍스트의 동작방식
오브젝트 팩토리를 이용했던 방식과 애플리케이션 컨텍스트를 사용한 방식을 비교하면서 동작방식을 알아보자.