Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager';
错误日志:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Cannot resolve reference to bean 'myRealm' while setting bean property 'realm'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRealm' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.topsec.tbm.web.auth.TbmRealm]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: javassist.util.proxy.ProxyFactory.setUseCache(Z)V
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) ~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) ~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]
原因:jar冲突
org.apache.struts:struts2-core:jar:2.3.16自动引入了javassist:javassist:jar:3.11.0.GA
自己开发的系统中使用了:org.javassist:javassist:jar:3.18.1-GA
查看这两个jar中的class基本上一样。这两个jar分别属于不同的group.
看看maven定义:
struts自动引入的jar是这个maven定义:
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
而项目中使用的是:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
解决办法:mavnen引入strtus时排出javassist这个jar
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency>扩展:
排除这个错误的方法:
1.使用ctrl+shift+T 查一下这个类的出处:
2.使用mvn dependency:copy-dependencies命令,这样将在pom.xml所在的目录下生成target\dependency目录。
3.查看步骤2中的目录可以看到有这个javassist.jar有两个不同版本的jar,为什么会有两个这种jar呢?查看一下引用树吧。
4.使用命令mvn dependency:tree > 1.txt输出下引用的目录结构
[INFO] +- org.apache.struts:struts2-core:jar:2.3.16:compile
[INFO] | +- org.apache.struts.xwork:xwork-core:jar:2.3.16:compile
[INFO] | | +- asm:asm:jar:3.3:compile
[INFO] | | \- asm:asm-commons:jar:3.3:compile
[INFO] | | \- asm:asm-tree:jar:3.3:compile
[INFO] | +- org.freemarker:freemarker:jar:2.3.19:compile
[INFO] | +- ognl:ognl:jar:3.0.6:compile
[INFO] | | \- javassist:javassist:jar:3.11.0.GA:compile
......
[INFO] +- org.hibernate:hibernate-core:jar:4.3.3.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
[INFO] | +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
[INFO] | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] | +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.4.Final:compile
[INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] | +- org.javassist:javassist:jar:3.18.1-GA:compile
5.使用maven的exclusion排除干扰的jar.
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency>
转载于http://blog.youkuaiyun.com/lk_blog/article/details/41554757