Skip to main content Link Menu Expand (external link) Document Search Copy Copied

스프링 빈 컨테이너(Bean Container)의 원리 (@Configuration , @Bean)


먼저, 스프링 컨테이너를 생성하고, 객체들을 스프링 컨테이너의 빈으로서 저장하려면,

ApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);


ApplicationContext 인터페이스를 사용해서 AnnotationConfigApplicationContext 클래스를 생성하고,

매개변수로서 @Configuration 에너테이션이 붙은 클래스와 @Bean 에너테이션을 통해 빈 설정이 되어있는,

Config 클래스를 입력해야한다.

참고로, ApplicationContext는 빈을 조회하고 관리하는 기능이 있는 BeanFactory 인터페이스를 상속하고 있고,

단순히 빈을 조회하고 관리하는 기능 외에 부가기능을 사용하기 위해 ApplicationContext 인터페이스를 사용한다.

아무튼, 매개변수로서 입력받은 클래스를 바탕으로 스프링 컨테이너를 생성한다.

스프링 컨테이너 
빈 이름빈 객체
@Bean 표시된 메서드의 이름 (@Bean(“name”) 과 같이 직접 이름을 지정해줄 수도 있다.)메서드가 반환하는 객체

예를 들어

@Configuration
class ExampleConfig{
	
    @Bean
    void Car car(){
		return new carImpl(oil(),engine());     
    }

    @Bean
    void Oil oil(){
		return	new oilImpl();   
    }
    
    @Bean("CustomName")
    void Engine engine(){
		return	new engineImpl();
    }

}

위와 같은 @Configuration 과 @Bean 에너테이션으로 정보를 설정한 ExampleConfig 라는 클래스가 있다고할 때,

ApplicationContext ac = new AnnotationConfigApplicationContext(ExampleConfig.class); 를 하게 되면


스프링 컨테이너 
빈 이름빈 객체
carcarImpl
oiloilImpl
CustomName (이름을 지정해주었으므로)engineImpl


위와 같은 스프링 컨테이너가 생성될 것이다.

그리고 car 클래스의 반환값의 매개변수에 추상화가 되어있지만, 스프링 컨테이너에서 등록된 빈 정보를 통해 구현객체가 입력될 수 있게끔 관리해준다.

즉, 의존관계가 연결이 된다.

Xml 파일로 등록된 빈을 확인하고 싶다면 AnnotationConfigApplicationContext 대신 GenericXmlApplicationContext 를 사용하면 된다.