根据通用的设计原则:接口定义类型、类定义实现,代理对象可以实现一个或多个接口,但是不能实现类。因为代理类没有可以访问的名称,它们不能有构造函数,所以它们必须由工厂创建。具体参看:http://www.ibm.com/developerworks/cn/java/j-jtp08305.html
解决方案 »
- struts2的上传问题
- 正被机器 '123' 上的用户 'admin' 锁定
- qingwen
- 急问,用CXF做的web项目含一个webservice,Tomcat下可以运行,在Weblogic 下启动时报如下的错(在线等)
- csdn上没有高手??????
- struts 关于从数据库读出数据,汉字乱码
- 大狭们懂ibatis的近来看看啊,我都郁闷了好几天了,今天在搞不定就万了,帮帮我啊!!在线急等在线急等!!
- 请问new出来的context在什么时候需要close?会不会由于某些原因没法被gc而导致内存泄漏?
- 懂测试能进来帮我看看这个自己做的连接池如何做测试么?刚学有点弄不通,在线!!
- 关于JSTL问题,,,,声明写对了,但还是说找不到,,见图。。。
- 为什么我的tomcat的时间和系统时间不一致
- jsf datatable如何合并某几个上下相邻的单元格
cglib 可以代理所有类
因为代理类没有可以访问的名称,它们不能有构造函数。
-------我觉的代理类不一定要实现接口啊,我可以完全用反射来代替啊.机制不同,cglib 可以代理所有类
-------我知道cglib 可以代理所有类,我想讨论的是动态代理为什么不能代理类?
public final class TempProxy extends Proxy implements Temp{ private static Method m4; private static Method m2; private static Method m0; private static Method m3; private static Method m1; public TempProxy(InvocationHandler invocationhandler) { super(invocationhandler); } public final void Run() { try { h.invoke(this, m4, null); return; } catch(Error _ex) { } catch(Throwable throwable) { throw new UndeclaredThrowableException(throwable); } } public final String toString(){ try{ return (String)h.invoke(this, m2, null); } catch(Error _ex) { } catch(Throwable throwable) { throw new UndeclaredThrowableException(throwable); } return ""; } public final int hashCode() { try { return ((Integer)h.invoke(this, m0, null)).intValue(); } catch(Error _ex) { } catch(Throwable throwable){ throw new UndeclaredThrowableException(throwable); } return 123; } public final void Talk(){ try{ h.invoke(this, m3, null); return; } catch(Error _ex) { } catch(Throwable throwable) { throw new UndeclaredThrowableException(throwable); } } public final boolean equals(Object obj) { try { return ((Boolean)h.invoke(this, m1, new Object[] { obj })).booleanValue(); } catch(Error _ex) { } catch(Throwable throwable) { throw new UndeclaredThrowableException(throwable); } return false; } static{ try{ m4 = Class.forName("Temp").getMethod("Run", new Class[0]); m2 = Class.forName("java.lang.Object").getMethod("toString", new Class[0]); m0 = Class.forName("java.lang.Object").getMethod("hashCode", new Class[0]); m3 = Class.forName("Temp").getMethod("Talk", new Class[0]); m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[] { Class.forName("java.lang.Object") }); } catch(NoSuchMethodException nosuchmethodexception) { throw new NoSuchMethodError(nosuchmethodexception.getMessage()); } catch(ClassNotFoundException classnotfoundexception) { throw new NoClassDefFoundError(classnotfoundexception.getMessage()); } } }
但是jdk动态代理可以代理final类,而cglib不能代理final类。
至于性能方面,正在研究中。