无XML配置Spring项目找不到SessionFactory类型Bean报错如何解决
问题排查与解决步骤
1. 解决类无法解析问题
你遇到的LocalSessionFactoryBean、HibernateTransactionManager符号无法解析,是缺失spring-orm和Hibernate核心依赖导致的,在项目中引入对应依赖即可:
Maven配置(pom.xml)
<dependencies> <!-- Spring ORM --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>对应你的Spring版本号</version> </dependency> <!-- Hibernate核心 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>对应你使用的Hibernate版本号</version> </dependency> </dependencies>
Gradle配置(build.gradle)
dependencies { implementation 'org.springframework:spring-orm:你的Spring版本号' implementation 'org.hibernate:hibernate-core:你的Hibernate版本号' }
注意:如果使用Hibernate 5及以上版本,需要导入org.springframework.orm.hibernate5.LocalSessionFactoryBean和org.springframework.orm.hibernate5.HibernateTransactionManager,不要导错Hibernate 3/4的旧版本包
2. 解决SessionFactory无法注入问题
依赖正确引入后如果还有SessionFactory找不到的报错,按以下顺序排查:
- 确认
DemoAppConfig类上加了@Configuration注解,没有该注解的话,类内部的@Bean方法不会被Spring识别处理,自然不会生成SessionFactory实例 LocalSessionFactoryBean是SpringFactoryBean接口的实现类,Spring会自动调用其getObject()方法,将返回的SessionFactory实例注册到容器中,不需要你手动做额外转换- 确认配置类中的
env对象已经通过@Autowired/@Resource注入,避免setPackagesToScan传入null值导致sessionFactory初始化失败 - 确认EmployeeDAO类所在的包在Spring组件扫描范围内,即配置类上的
@ComponentScan注解包含了DAO的包路径,否则DAO内的@Autowired注解不会被Spring处理 - 确认你配置的
myDataSource()和getHibernateProperties()方法返回值正常,没有空值或者配置错误,否则sessionFactory初始化失败也会导致容器中没有对应Bean
内容的提问来源于stack exchange,提问作者Stefan Jankovic
相关产品推荐
相关产品推荐

