问题:spring框架通过Cglib自动生成代理类,由于这些代理类一直占用内存,长时间会导致内存溢出
请问spring框架一定是自动通过Cglib生成代理类的吗?可以不用CGlib自动生成吗?
请问spring框架一定是自动通过Cglib生成代理类的吗?可以不用CGlib自动生成吗?
解决方案 »
- 我的eclipse装的是eclipse-jee-helios-SR2-win32,我装什么版本myeclipse
- WEB + Swing + Socket lazy= true ,no session or session was closed
- ssh结合出现错误,大家帮帮忙
- ireport问题
- spring循环依赖的问题,那位大侠帮忙看看啊~
- 读取XML文件时,若TAG为空,则卡死,求助!
- jsp页面用Myeclipse virsual JSF designer打开后只有source视图
- WSAD5.0注册问题
- 为什么用javamail发送邮件后收到的的内容会是这样啊???
- 关于hibernate多表查询的问题
- 程序一个星期自动执行一次
- ssh 登陆处理 菜鸟求助
cglib不要求被代理类定义接口,它是通过继承的关系实现代理的!!!如果你的被代理类没有实现任何接口,那就会采用cglib生成代理!
回答#2楼 在我的项目中有dto类,在tomcat启动时就会在内存中产生 许多dto的CGlib代理类
我的dto如下,不是实现了接口吗 ,为什么还是CGlib的呢?public class UserDTO implements Comparable<UserDTO>, Serializable, Cloneable
我指的接口是业务接口,而不是JDK的接口( Comparable <UserDTO>, Serializable, Cloneable)
public interface UserDao {
//.......
}其实你不用管那些代理对象,如果没有引用,垃圾回收器会自动回收的!
cglib不要求被代理类定义接口,它是通过继承的关系实现代理的!!!
加入 cglib-nodep.jar
加入 <aop:aspectj-autoproxy proxy-target-class="true"/>强制使用cglib
3 如果目标对象没有实现了接口,必须采用cglib库,spring会在jdk动态代理和cglib之间转换
jdk动态代理和cglib动态代理(字节码生成)区别
* jdk动态代理只能对实现了接口的类生成代理,而不能针对没有实现接口的类代理
* cglib是针对类实现代理、主要是对指定的类生成一个子类,覆盖了其中的方法
因为是继承。所以该类或方法最好不要声明成final,导致无法继承父类生成代理类