Whiteship's Note

BeanLifeCycle 인터페이스를 없애보자.

Spring/Chapter 3 : 2008.09.22 16:50


BeanLifeCycle에 등장하는 여러 인터페이스 들 중에서 BeanFactoryAware, ApplicationContextAware, MessageSoruceAware, ApplicationEventPublisherAware, ResourceLoaderAware 인터페이스를 사용하지 않고도 이들이 해주는 일과 똑같은 작업을 할 수 있습니다.

@Component
public class Bean {

    @Autowired
    ApplicationContext applicationContext;
   
    @Autowired
    MessageSource messageSource;
   
    @Autowired
    ApplicationEventPublisher applicationEventPublisher;

    @Autowired
    ResourceLoader resourceLoader;
   
    @Autowired
    BeanFactory beanFactory;
   
}

이런식으로 @Autowired를 사용하시면 됩니다. 물론 저 중에서 BeanFactory를 뺀 나머지는 ApplicationContext를 사용할 때 이용할 수 있겠죠. 라이프사이클 중에 InitializingBean 인터페이스는 bean 엘리먼트의 init-method 또는 @PostConstruct를 사용하면 대체할 수 있습니다.

꼭 필요하진 않고, 있을 때만 주입하고 싶다면, @Autowired(required=false) 이렇게 설정하면 되겠죠.

다음은 위 코드의 테스트 코드입니다,.

@ContextConfiguration(locations="springContext.xml")
public class BeanTest extends AbstractJUnit4SpringContextTests{

    @Autowired
    Bean bean;
   
    @Test
    public void lifecycle() {
        assertNotNull(bean.beanFactory);
        assertNotNull(bean.applicationContext);
        assertNotNull(bean.messageSource);
        assertNotNull(bean.applicationEventPublisher);
        assertNotNull(bean.resourceLoader);
    }
   
}

테스트는 당연히 잘 돌아갑니다.

아차. 빈 설정파일은 딱 두 줄 한 줄 입니다.
    <context:component-scan base-package="org.opensprout.sandbox.lifecycle" />
   
    <context:annotation-config />

top

  1. Favicon of http://toby.epril.com BlogIcon '토비 2008.09.22 18:27 PERM. MOD/DEL REPLY

    XML 설정에 문제가 있꾼!

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.09.22 22:27 신고 PERM MOD/DEL

    헉;;; 한줄로 줄일 수 있군요.

    context:component-scan 이 엘리먼트 등록하면 <context:annotation-config /> 얘도 등록한셈이 되는거죠.

    ㅎㅎ감사합니다.

Write a comment.




: 1 : 2 : 3 : 4 : 5 : 6 : ··· : 58 :