Обратите внимание, что я не ссылаюсь на 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?

Ответы на вопрос(6)

Ваш ответ на вопрос