IoC in Spring : BeanFactory

스프링에서의 IoC

스프링에서 IoC는 컨텍스트화 된 의존성룩업(CDL) 방식과 의존성주입(DI) 모두를 지원한다. 가급적 의존성주입(DI)으로 프로그램을 구현하는 것이 권장된다. 단독실행형 java 프로그램에서는 main()메서드에서 스프링 컨테이너를 부트스트랩하고 의존성을 룩업하여 처리해야한다. (Spring MVC FWK는 제외) 이런 경우를 제외하고는 대부분 자동화된 DI패턴으로 프로그램을 구현해야 한다. 



BeanFactory

스프링 의존성 주입 컨테이너의 핵심이 되는 인터페이스이다. 의존성과 생명주기 등을 포함해 컴포넌트를 관리하는 책임을 진다. 스프링에서 Bean이라는 용어는 컨테이너가 관리하는 컴포넌트를 가리킨다.


어플리케이션은 BeanFactory인터페이스를 구현하는 클래스 인스턴스를 생성하고, 인스턴스에 빈과 의존성 설정 정보를 지정해야 한다. 이렇게 하고 난 이후 어플리케이션은 BeanFactory를 통해 Bean에 대한 접근이 가능하고 처리 할 수 있다. 


(웹 어플리케이션에서는 web.xml 디스크립터 파일에 선언한 스프링 ContextLoaderListener 클래스에 의하여 어플리케이션이 시작 시점에 웹 컨테이너에 의해 스프링의 ApplicationContext가 자동으로 부트스트랩 된다는 점은 참고삼아 알아두자.)


DefaultListableBeanFactory는 BeanFactory인터페이스와 BeanDefinitionRegistry를 함께 구현하고 있고, PropertiesBeanDefinitionReader나 XmlBeanDefinitionReader를 사용해 설정파일로 부터 Bean 설정 정보를 읽을 수 있다. 



BeanFactory Example

[IMessageProvider.java]

1
2
3
4
5
6
7
package com.ljs.beanfactory.message;
/*
 * getMessage Method를 정의하는 IMessageProvider Interface생성 생성
 */
public interface IMessageProvider {
    public String getMessage();
}
cs


[SimpleMessageProvider.java]

 - 위에 정의된 IMessageProvider를 구현하는 구현체

1
2
3
4
5
6
7
8
9
10
11
package com.ljs.beanfactory.message;
 
/*
 * IMessageProvider interface를 구현하는 Class 생성
 */
public class SimpleMessageProvider implements IMessageProvider {
 
    public String getMessage() {
        return "Hello BeanFactory";
    }
}
cs


[xmlBeanFactory.xml]

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <!-- IMessageProvider Bean 정의 -->                
    <bean id="messageProvider" name="SimplMessageProvider" class="com.ljs.beanfactory.message.SimpleMessageProvider"/>
    
</beans>
cs

 

[BeanFactoryExample.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.ljs.beanfactory;
 
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.FileSystemResource;
 
import com.ljs.beanfactory.message.IMessageProvider;
 
public class BeanFactoryExample {
 
    public static void main(String[] args) {
        
        // beanFacroty, BeanDefinitionRegistry를 함께 구현하는 DefaultListableBeanFactory 인스턴스를 생성하고 부트스트랩(설정파일로딩)  
        DefaultListableBeanFactory beanFacroty = new DefaultListableBeanFactory();
        
        // xml 파일을 통해서 BeanFactory 부트스트랩
        XmlBeanDefinitionReader         xmlDefReader  = new XmlBeanDefinitionReader(beanFacroty);
        xmlDefReader.loadBeanDefinitions(new FileSystemResource("src/main/resources/META-INF/spring/xmlBeanFactory.xml"));
 
        /* properties 파일을 통해서 BeanFactory 부트스트랩
        PropertiesBeanDefinitionReader propDefReader = new PropertiesBeanDefinitionReader();
        propDefReader.loadBeanDefinitions(new FileSystemResource("src/main/resources/META-INF/spring/xmlBeanFactory.properties"));
         */
        
        IMessageProvider provider = (IMessageProvider) beanFacroty.getBean("messageProvider");
        System.out.println(provider.getMessage());
    }
}
cs


다운로드


이 글을 공유하기

댓글

Email by JB FACTORY