spring异常:Couldn't generate CGLIB subclass of class

shangpusp 2009-03-27 01:28:52
这是我的一部分配置文件,
1、异常是说UserDAOProxy有错误,可是在没找出来。
2、后面Cause by 里说class "spring.dao.UserDAO$$EnhancerByCGLIB$$e180205a"'s signer information does not match signer information of other classes in the same package。
异常在这里的提示用不用参考啊。这是cglib-aop说这个包有冲突吗?可是没找到导入的其他包里也有这个类啊。

请大家帮助下了,谢谢!


<!-- 配置UserDAO -->
<bean id="userDAO" class="spring.dao.UserDAO">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="UserDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="userDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>




ERROR - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDAOProxy' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Couldn't generate CGLIB subclass of class [class spring.dao.UserDAO]: Common causes of this problem include using a final class or a non-visible class; nested exception is net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
org.springframework.aop.framework.AopConfigException: Couldn't generate CGLIB subclass of class [class spring.dao.UserDAO]: Common causes of this problem include using a final class or a non-visible class; nested exception is net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:189)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:143)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:70)
at org.springframework.transaction.interceptor.TransactionProxyFactoryBean.getProxy(TransactionProxyFactoryBean.java:341)
at org.springframework.transaction.interceptor.TransactionProxyFactoryBean.afterPropertiesSet(TransactionProxyFactoryBean.java:313)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:400)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:144)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:321)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
... 41 more
Caused by: java.lang.SecurityException: class "spring.dao.UserDAO$$EnhancerByCGLIB$$e180205a"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
... 47 more
...全文
3943 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangpusp 2009-03-30
  • 打赏
  • 举报
回复
终于解决了,谢谢流火,谢谢大家,呵呵

根本问题在于我使用的是CGLIB代理有问题,(外国一些网站上说是这个包本身的问题,但还是不太明白)
还是直接使用JDK的动态代理比较好。
这样,要代理的目标类必须实现一个接口。然后通过该接口来实现代理。

详细的解决办法,我记录在了我的日志里。
http://blog.csdn.net/shangpusp/archive/2009/03/27/4028311.aspx
shangpusp 2009-03-29
  • 打赏
  • 举报
回复
流火,你好,
我已经导入了CGLIB包cglib-nodep-2.1_3.jar
因为在它的源代码里才有抛出的那个Couldn't generate CGLIB subclass of class [class spring.dao.UserDAO]: Common causes of this problem include using a final class or a non-visible class;

你是说设置这个吧
<property name="optimize" value="true" ></property>
或者用
<property name="optimize">
<value>true</value>
</property>

但还是那个异常。

然月枕流君 2009-03-29
  • 打赏
  • 举报
回复
proxyTargetClass和optimize设为true,都是使用CGLIB;
这样,你确定你引入了CGLIB的jar包了吗
shangpusp 2009-03-28
  • 打赏
  • 举报
回复
流火你好,感谢你的回答

但按你的写法还是不行,ref=true它报reference Bean true not found
找不到true 后应该是一个类吧,我在哪添加上它啊。

<property name="target" ref="dao" ></property>
这句和我那个
<property name="target">
<ref local="userDAO" />
</property>

应该是等效的,但Bean的名字是userDAO

我仔细查过,好像没有弄错大小写。
然月枕流君 2009-03-28
  • 打赏
  • 举报
回复
设置CGlib为true,然后target格式这样来写,
<property name="optimize" ref="true" ></property>
//设置为CGlib为true
<property name="target" ref="dao" ></property>
//目标类
shangpusp 2009-03-28
  • 打赏
  • 举报
回复
我查了些东西,说要代理一个类的话要设置
<property name="proxyTargetClass">
<value>true</value>
</property>

我把它添到<bean id="UserDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
里了,可还是那个异常。
shangpusp 2009-03-28
  • 打赏
  • 举报
回复
谢谢你了,我的userDAO是类,如下

public class UserDAO {
private DataSource dataSource;

public DataSource getDataSource() {
return dataSource;
}

public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}

//validate the login name isValid
public boolean isValid(String username,String password){
}
//validate the existence of username
public boolean isExist(String username){
}
//add a new user
public void insertUser(User user){
}
然月枕流君 2009-03-28
  • 打赏
  • 举报
回复
先告诉我,userDAO是接口,还是\类
Rooock 2009-03-28
  • 打赏
  • 举报
回复
在使用AOP的时候,有两种方式,一种是用Java的动态代理技术.
另一种是使用cglib在运行时生成代理类的子类.
在这里,它说,我要创建你的UserDao的子类,但是失败了.
原因可能是UserDao类是final的,或者它无法访问.

不过,我认为你拼写错误的可能性更大一些.
查看引用和定义UserDao的地方.
shangpusp 2009-03-27
  • 打赏
  • 举报
回复
还是没解决,可能是对原理理解的不透彻吧
yjaqktpp 2009-03-27
  • 打赏
  • 举报
回复
<bean id="userDAO" class="spring.dao.UserDAO">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="UserDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="userDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly </prop>
</props>
</property>
</bean>
看看你的配置
<property name="target">
<ref local="userDAO" />
</property>
这时错了,参考一下我的:

<bean id="baseDao" class="com.zy.dao.daoImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="baseManager" parent="txProxyTemplate">
<property name="target">
<bean class="com.zy.service.serviceImpl">
<property name="dao">
<ref bean="baseDao" />
</property>
</bean>
</property>
</bean>
denghan 2009-03-27
  • 打赏
  • 举报
回复
貌似是反射时找不到spring.dao.UserDAO类

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧