Spring 异常 Couldn't generate CGLIB subclass of class [class spring.dao.UserDAO]: Common causes of this problem include using a f

原创 2009年03月27日 00:47:00

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;

我的一部分配置文件如下:

<!-- 配置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)

 

 

解决办法:

 

这个问题是因为使用了代理bean,

在spring中有两种代理CGLIB和JDK代理,理论上来说使用CGLIB可以直接对类进行代理,可是我也没有调出来。(外国一些网站上说是这个包本身有问题,但还是不太明白)

只好使用JDK来实现代理,这样,要代理的目标类必须实现一个接口。然后通过该接口来实现代理。 

 

也就是说为要实现代理的类写一个接口IUserDAO,并且在配置文件的

<bean id="UserDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
中加入

<property name="proxyInterfaces">
                 <value>spring.dao.IUserDAO</value>
</property>

 

这样就使用了JDK的代理。也就没有了这个异常,不过……

 

不过还要再改一个地方不然会出下面这个异常,转换异常,因为现在使用的是接口,而原来是对类的操作,当然报这个异常了。

(Web 项目会出这个异常)Failed to convert property value of type [java.lang.String] to required type [java.lang.Class[]] for property 'proxyInterfaces'; nested exception is java.lang.IllegalArgumentException: Cannot find class [IUserDAO]. Root cause: java.lang.ClassNotFoundException: IUserDAO

 

(Java Project 会出这个异常) java.lang.ClassCastException: $Proxy0

 

要在使用这个UserDAOProxy的地方(也就是声明UserDAO的set方法的地方),用接口来new 这个类。如下

IUserDAO userDAO = new UserDAO();

 

这样就彻底解决这个问题了。

 

在此要感谢江楼月(网易博客)的指导啊。呵呵

还有流火,

还有许多人

spring使用cglib代理需要注意的问题

本周遇到了如下的bug。显然是掉cglib的时候没有成功的new出来,貌似cglib用了默认没有参数构造方法。所以只能在调用之前先调用无参数构造方法。Caused by: org.springfram...
  • blackchoc
  • blackchoc
  • 2010年03月03日 23:38
  • 7442

Could not generate CGLIB subclass of class编译时出错

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating b...
  • shiyibodec
  • shiyibodec
  • 2016年01月17日 19:28
  • 3355

搭建Ubuntu14.04编译环境并下载源码(二)

续上搭建Ubuntu14.04编译环境并下载源码(一) 今天临时买了个VPN的帐号,继续下载,翻墙的感觉还是不错的,推荐一下:http://a.wy002.com/385947 使用repo sy...
  • deng0zhaotai
  • deng0zhaotai
  • 2014年07月09日 10:57
  • 8571

Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy22]

proxy-target-class="true"/>,加上红色部分 报错内容如下: Error creating bean with name 'userMapper': Post-process...
  • u011461420
  • u011461420
  • 2016年03月23日 19:19
  • 2232

spring jpa搭建遇到的问题

spring框架升到最新版本4.1.2 这时需要增加spring data jpa(版本是1.7.1)的支持。 遇到了一下问题: Caused by: org.springframework.ao...
  • yesorno828
  • yesorno828
  • 2014年12月11日 11:11
  • 773

记一次Spring aop的所遇到的问题

由来 项目中需要实现某个订单的状态改变后然后推送给第三方的功能,由于更改状态的项目和推送的项目不是同一个项目,所以为了不改变原项目的代码,我们考虑用spring的aop来实现。 项目用的是spri...
  • gao199108
  • gao199108
  • 2017年08月30日 18:25
  • 220

org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [c

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating b...
  • q1054261752
  • q1054261752
  • 2017年02月28日 12:44
  • 857

Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy8

本来我也看不懂这是个嘛意思,不过我以前的何领导告诉了我。这个意思就是final类不能子类化,因此不能代理。两个处理方法,一个去掉final,另一个给他加个接口。 首先我非常明白他的意思,但是我现在...
  • cm_0914
  • cm_0914
  • 2014年01月23日 14:23
  • 5645

通过CGLIB实现AOP的浅析(顺便简单对比了一下JDK的动态代理)

关键字: spring, cglib, 动态代理, aop问了两个问题,还跑到论坛里回贴追着问,最终都得到的是结论性的贴子,没有得到我想要的分析。 功夫不负有心人,我终于弄明白了。 现象和问题请参照下...
  • philip_123456
  • philip_123456
  • 2009年06月04日 10:51
  • 5996

Spring aop Cannot subclass final class class com.sun.proxy

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean wit...
  • wuzhongxing
  • wuzhongxing
  • 2015年01月30日 15:13
  • 2985
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring 异常 Couldn't generate CGLIB subclass of class [class spring.dao.UserDAO]: Common causes of this problem include using a f
举报原因:
原因补充:

(最多只允许输入30个字)