【发布时间】:2015-04-04 22:54:00
【问题描述】:
我将 Hibernate 和 Spring 与基于 Java 的配置一起使用。我的配置文件是这个:
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "dto" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
工作正常。这个没问题,但是当我手动尝试为trasactionManager设置sessionfactory参数时,像这样:
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory());
return txManager;
}
IDE 正在显示:
`The method setSessionFactory(SessionFactory) in the type HibernateTransactionManager is not applicable for the arguments (LocalSessionFactoryBean)`
所以,我创建了一个如下所示的 sessionFactory
@Bean
@Autowired
public SessionFactory sessionFactory(DataSource dataSource) {
LocalSessionFactoryBuilder sessionFactory = new LocalSessionFactoryBuilder(dataSource);
sessionFactory.addProperties(hibernateProperties());
sessionFactory.scanPackages("dto");
return sessionFactory.buildSessionFactory();
}
并传递给trasactionManager 成功了。
我的问题是,即使第一种方法中不存在 sessionFactory 实例,spring 如何自动装配 sessionFactory 对象?
【问题讨论】:
-
LocalSessionFactoryBean不是SessionFactory,它是FactoryBeanforSessionFactory,参见javadoc -
是的,我错过了这一点。谢谢
-
但是 spring 如何将 SessionFactory bean 自动连接到 transactionManager 构造函数?
-
如果你观察到正确的答案并没有解释 spring 如何将 SessionFactory bean 自动连接到 transactionManager 构造函数
标签: java spring hibernate configuration autowired