A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求大神详细解释下,动态代理有点晕菜

6 个回复

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
itpower 发表于 2014-2-13 20:16
也是一个类,在代理类中要调用目标类的方法,但是在方法的前后要加上系统的功能
如果采用工厂模式和配置文 ...

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

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

如果有很多类都用到代理在将系统业务添加在里面的话,最简单的方法就让他们都实现一个或多个借口,而不是每个类都搞一个代理!
回复 使用道具 举报
itpower 发表于 2014-2-13 21:54
如果有很多类都用到代理在将系统业务添加在里面的话,最简单的方法就让他们都实现一个或多个借口,而不是 ...

哦 原来是这样 终于想通了:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马