Обратите внимание, что я не ссылаюсь на sessionFactoryBean как бин напрямую. Я автоматически подключаю sessionFactory к другим моим компонентам.
обеспечиваетFactoryBean
интерфейс, позволяющий нетривиальную инициализацию bean-компонентов. Фреймворк предоставляет множество реализаций фабричных bean-компонентов и - при использовании XML-конфигурации Spring - фабричные bean-компоненты просты в использовании.
Однако в Spring 3.0 я не могу найти удовлетворительный способ использования фабричных bean-компонентов с конфигурацией на основе аннотаций (ранее JavaConfig).
Очевидно, я мог бы вручную создать экземпляр фабричного компонента и установить любые необходимые свойства, например, так:
@Configuration
public class AppConfig {
...
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
factory.setAnotherProperty(anotherProperty());
return factory.getObject();
}
Однако это не удастся, еслиFactoryBean
реализованы любые специфичные для Spring интерфейсы обратного вызова, такие какInitializingBean
, ApplicationContextAware
, BeanClassLoaderAware
, или же@PostConstruct
например. Мне также нужно проверить FactoryBean, выяснить, какие интерфейсы обратного вызова он реализует, а затем самостоятельно реализовать эту функцию, вызвавsetApplicationContext
, afterPropertiesSet()
и т.п.
Это кажется мне неловким и скрытным: разработчики приложений не должны реализовывать обратные вызовы контейнера IOC.
Кто-нибудь знает лучшее решение для использования FactoryBeans из конфигураций Spring Annotation?