什麼是在@Configuration
類中使用工廠bean的正確方法?春天 - 在配置中使用工廠bean?
假設爲SessionFactory
我有以下幾點:
@Bean
public AnnotationSessionFactoryBean sessionFactory() {
AnnotationSessionFactoryBean factory = new AnnotationSessionFactoryBean();
// set up properties etc.
return factory;
}
現在這個方法返回一個bean工廠,沒有實現SessionFactory
。如果我在@Autowired
爲SessionFactory
另外一個bean使用它,它工作得很好,並從bean工廠獲取它:
@Controller
public class MyController {
@Autowired SessionFactory sessionFactory;
// ...
}
我想這就是確定。
然而,就成了一個問題,如果我想在同樣的配置類使用SessionFactory
:
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager man = new HibernateTransactionManager();
// Ideal - doesn't work because sessionFactory() return type doesn't match:
// SessionFactory sessionFactory = sessionFactory();
// Is this one correct?
// SessionFactory sessionFactory = (SessionFactory) sessionFactory().getObject();
man.setSessionFactory(sessionFactory);
return man;
}
什麼是正確的方式來實現這種依賴?
不要求它的afterPropertiesSet()? –
不,Spring在調用'@ Bean'方法之後和返回bean本身之前足夠智能地執行所有必需的初始化。所以'InitializingBean','DisposableBean','@ PostConstruct'等都被正確識別和處理。事實上,我總是發現調用'afterPropertiesSet'有點破解,因爲它是容器的責任。 –
另外,請參閱我的編輯,我找到了另一個解決方案。 –