使用Spring web-mvc 5.0.1.RELEASE与Hibernate 5.2.15.Final遇依赖异常
解决Spring UnsatisfiedDependencyException依赖问题
咱们先拆解下这个异常:org.springframework.beans.factory.UnsatisfiedDependencyException 本质是Spring容器在创建DemoDaoImpl这个Bean时,找不到它依赖的sessionFactory Bean,或者sessionFactory本身创建失败了(从嵌套的BeanCreationException也能看出端倪)。结合你Jar+War的Maven项目结构,我整理了几个最可能的排查方向:
1. 确认Jar工程的Bean是否被War的Spring容器扫描到
Jar里的DemoDaoImpl或者相关配置类,有没有被War工程的Spring上下文纳入扫描范围?
- 要是用注解驱动(比如
@SpringBootApplication或@ComponentScan),得确保扫描路径包含Jar工程的包路径。比如Jar类在com.example.jar.dao,那War的@ComponentScan要写成basePackages = {"com.example.war", "com.example.jar"} - 要是用XML配置,得检查有没有导入Jar里的配置文件,比如用
<import resource="classpath*:spring-jar-config.xml"/>(注意用classpath*:才能扫描到Jar包内的资源)
2. 排查SessionFactory的配置问题
嵌套的BeanCreationException说明sessionFactory本身创建失败,常见原因有这些:
- 数据库连接配置错误:检查War工程的
application.properties/application.yml或XML里的数据库URL、用户名、密码是否正确,驱动类是否匹配数据库版本 - Hibernate配置问题:比如
hibernate.hbm2ddl.auto的取值是否合法,实体类的@Entity注解或.hbm.xml映射文件有没有配置错误,遗漏必要属性 - 要是SessionFactory的配置在Jar工程里,得确保这些配置能被War工程加载到——比如Jar里的配置文件是否正确打包,War能读取到
3. 检查Maven依赖范围是否正确
你在War的pom.xml里配置Jar依赖时,依赖范围(<scope>)是不是compile?如果误设成provided或test,Tomcat启动时Jar里的类不会被加载,自然找不到Bean。正确的配置应该是:
<dependency> <groupId>你的Jar工程groupId</groupId> <artifactId>你的Jar工程artifactId</artifactId> <version>对应版本号</version> <!-- 默认就是compile,也可以显式声明 --> <scope>compile</scope> </dependency>
4. 验证Jar包是否正确依赖
- 先确认Jar工程已经执行
mvn clean install,把Jar包安装到本地Maven仓库了 - 检查War工程
target目录下的WEB-INF/lib文件夹,有没有你的Jar包。如果没有,说明Maven依赖没生效,可能是groupId/artifactId/version写错了,或者Jar工程没安装成功
额外排查小技巧
- 开启Spring的DEBUG日志,查看容器初始化时的Bean扫描和创建过程,能清楚看到哪些Bean被加载、哪些没被加载,方便定位问题
- 检查
DemoDaoImpl里的sessionFactory字段有没有加@Autowired或@Resource注解?没加的话Spring没法自动注入依赖
内容的提问来源于stack exchange,提问作者Satendra Aditya
相关产品推荐
相关产品推荐

