Spring предоставляет интерфейс 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?