黑马程序员技术交流社区

标题: JVM生成的动态类必须实现一个或多个接口? [打印本页]

作者: 糖伯貓    时间: 2014-2-13 14:06
标题: JVM生成的动态类必须实现一个或多个接口?
求大神详细解释下,动态代理有点晕菜
作者: 分解式    时间: 2014-2-13 18:54
•首先当前线程的类加载器去加载线程中的第一个类. (可以通过getContextClassCloader()和setContextClassLoader(ClassLoader cl)方法, 获取和设置当前线程的类加载器).
作者: itpower    时间: 2014-2-13 20:16
也是一个类,在代理类中要调用目标类的方法,但是在方法的前后要加上系统的功能
如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类,还是代理类,这样以后就很容易切换,譬如:想要日志功能时就配置代理类,否则配置目标类,这样增加系统功能很容易,以后运行一段时间后,邮箱去掉系统功能也很容易;
面向方面的编程AOP:系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面。如:安全,事务,日志贯穿到了好多个模块。
那么就是要使交叉业务模块化,可以采用将切面代码移动奥原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,利用代理正好可以解决这种问题。代理是实现AOP功能的核心和关键技术
JVM可以在运行期间动态生成出类的字节码,这种动态生成的类万网被用作代理类,即动态代理类。
JVM生成的动态类必须实现一个或多个接口,所以,JVM的动态类只能用作具有相同接口的目标类的代理。
作者: 糖伯貓    时间: 2014-2-13 21:40
itpower 发表于 2014-2-13 20:16
也是一个类,在代理类中要调用目标类的方法,但是在方法的前后要加上系统的功能
如果采用工厂模式和配置文 ...

我想知道那为什么必须要实现一个接口和多个接口了,接口在动态代理中起了什么作用?
作者: 糖伯貓    时间: 2014-2-13 21:42
分解式 发表于 2014-2-13 18:54
•首先当前线程的类加载器去加载线程中的第一个类. (可以通过getContextClassCloader()和setContextClassLo ...

getContextClassCloader()?这是javaWeb里面的吗?
作者: itpower    时间: 2014-2-13 21:54
糖伯貓 发表于 2014-2-13 21:40
我想知道那为什么必须要实现一个接口和多个接口了,接口在动态代理中起了什么作用? ...

如果有很多类都用到代理在将系统业务添加在里面的话,最简单的方法就让他们都实现一个或多个借口,而不是每个类都搞一个代理!
作者: 糖伯貓    时间: 2014-2-13 22:42
itpower 发表于 2014-2-13 21:54
如果有很多类都用到代理在将系统业务添加在里面的话,最简单的方法就让他们都实现一个或多个借口,而不是 ...

哦 原来是这样 终于想通了:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2