Spring предоставляет интерфейс FactoryBean
, позволяющий нетривиальную инициализацию bean-компонентов. Фреймворк предоставляет множество реализаций фабричных бинов, и - при использовании конфигурации Spring XML - фабричные бины просты в использовании.
Однако в Spring 3.0 я не могу найти удовлетворительный способ использования фабричных компонентов с конфигурацией на основе аннотаций (в девичестве JavaConfig).
Очевидно, я мог бы вручную создать экземпляр фабричного bean-компонента и сам установить все необходимые свойства, например:
@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?