Spring предоставляет интерфейс FactoryBean
, чтобы разрешить нетривиальную инициализацию beans. Структура предоставляет множество реализаций factory beans и - при использовании Spring конфигурации XML factory beans просты в использовании.
Однако в Spring 3.0 я не могу найти удовлетворительный способ использования factory beans с конфигурацией на основе аннотаций (née JavaConfig).
Очевидно, что я мог бы вручную создать экземпляр factory 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 конфигураций аннотаций?