BeanLifeCycle 인터페이스를 없애보자.
BeanLifeCycle에 등장하는 여러 인터페이스 들 중에서 BeanFactoryAware, ApplicationContextAware, MessageSoruceAware, ApplicationEventPublisherAware, ResourceLoaderAware 인터페이스를 사용하지 않고도 이들이 해주는 일과 똑같은 작업을 할 수 있습니다.
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) 이렇게 설정하면 되겠죠.
다음은 위 코드의 테스트 코드입니다,.
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:annotation-config />