BeanFactoryAware 테스트
public void testBeanFactoryAware() {
BeanFactory beanFactory = bean.getBeanFactory();
assertNotNull(beanFactory);
}
테스트 코드는 간단합니다. 이전 글에 사용했던 클레스에 BeanFactoryAware 인터페이스를 추가로 구현합니다.
... 생략
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("setBeanFactory() 실행합니다.");
this.beanFactory = beanFactory;
}
public BeanFactory getBeanFactory() {
return beanFactory;
}
}
테스트를 실행하면 테스트가 통과 하는 걸 확인 할 수 있습니다. 그리고 Output 창을 통해 확인 하면 다음과 같습니다.
setBeanName() 실행합니다.
setBeanClassLoader() 실행합니다.
setBeanFactory() 실행합니다.
BeanFactoryAware 사용 예
ObjectFactoryCreatingFactoryBean 사용 예
이 인터페이스를 구현한 클레스들..
- AbstractAdvisorAutoProxyCreator, AbstractAutoProxyCreator, AbstractBeanFactoryBasedTargetSource, AbstractBeanFactoryBasedTargetSourceCreator, AbstractBeanFactoryPointcutAdvisor, AbstractFactoryBean, AbstractPoolingTargetSource, AbstractPrototypeBasedTargetSource, AnnotationAwareAspectJAutoProxyCreator, AspectJAwareAdvisorAutoProxyCreator, BeanConfigurerSupport, BeanFactoryDataSourceLookup, BeanNameAutoProxyCreator, BeanReferenceFactoryBean, CommonsPoolTargetSource, DefaultAdvisorAutoProxyCreator, DefaultBeanFactoryPointcutAdvisor, HibernateAccessor, HibernateAccessor, HibernateInterceptor, HibernateInterceptor, HibernateTemplate, HibernateTemplate, HibernateTransactionManager, HibernateTransactionManager, LazyInitTargetSource, LazyInitTargetSourceCreator, ListFactoryBean, MapFactoryBean, MBeanExporter, MethodInvokingFactoryBean, MethodInvokingJobDetailFactoryBean, MethodLocatingFactoryBean, ObjectFactoryCreatingFactoryBean, OpenSessionInViewInterceptor, OpenSessionInViewInterceptor, PersistenceAnnotationBeanPostProcessor, PersistenceExceptionTranslationInterceptor, PersistenceExceptionTranslationPostProcessor, PreferencesPlaceholderConfigurer, PropertyPathFactoryBean, PropertyPlaceholderConfigurer, PrototypeTargetSource, ProxyFactoryBean, QuickTargetSourceCreator, ScopedProxyFactoryBean, ScriptFactoryPostProcessor, ServiceLocatorFactoryBean, ServletContextPropertyPlaceholderConfigurer, SetFactoryBean, SimpleBeanFactoryAwareAspectInstanceFactory, SimpleBeanTargetSource, ThreadLocalTargetSource, TransactionProxyFactoryBean
엄청나게 많습니다.
주로 다른 Bean을 lock up 할 수 있는 factory사 필요할 때 사용합니다. 특정 객체만을 뽑아낼 factory가 필요하다면 FactoryBean을 사용하면 되는데 이때도 이 인터페이스를 사용할 수 있기 때문에 위의 구현체들의 반정도는 XXXFactoryBean 입니다.
FactroyBean을 사용하는 이유는 '만들 수 없는 것'을 FactoryBean으로 만들기 이 글에서 확인할 수 있으며 주로 객체 생성에 복잡한 설정과 로직이 필요한 경우에 사용하며 따라서 다른 프레임워크와 연동하는 객체가 필요한 경우에 자주 사용하며 위의 구현체 중에 또 절반 정도는 그러한 구현체에 해당합니다.