黑马程序员-----代理
来源:互联网 发布:tor网络原理文章 编辑:程序博客网 时间:2024/05/21 07:12
AOP-->Aspect oriented program 面向切面编程
功能贯穿模块---->交叉业务
AOP的目标就是使交叉业务模块化
使用代理技术方案解决AOP
JVM可以在运行期动态生成类的字节码,往往用作代理称作动态代理类
JVM生成的动态类必须实现一个或多个目标类继承的接口,所以JVM生成的动态类只能用作相同接口的目标类的代理
如果目标类没有接口,适用CGLIB(第三方库)可以动态生成一个类的子类
代理类需要在调用目标方法加上系统功能
可以在目标方法前,后,前后,catch块中
通过Proxy生成动态类
Proxy.getProxyClass(ClassLoader,Interface.class)
ClassLoader---->指定类加载器
Interface.class----->接口的字节码
创建动态类的实例对象
Proxy.newProxyInstance(ClassLoader,Interface.calss…[],Constructor's Parameter)
省去了反射建立实例的步骤
Interface.calss…[]
--->实现的接口”们”
Constructor's Parameter
--->构造函参数
Proxy建立的动态类的构造方法需要一个InvocationHandler类的实例参数
new InvocarionHandler(){ public void invoke(Object proxy,Method method,Object [] args){ //dosomething before method.invoke(target,args); //dosomething after }}
proxy--->代理类对象 method--->代理方法,args---->方法需要的参数
InvocationHandler原理分析
通过代理类的构造方法传入InvocationHandler子类对象,对象通过调用目标类方法并在前后dosth.before&&dosth.after加上系统功能代码实现代理
InvocationHandler的invoke需要3参数,代理对象(目标对象),方法,方法执行参数
!对于从Object类下继承的方法,只有hashcode,equals,toString会交给invocationHandler处理,其他的不会
将系统功能封装到对象之中,实现切面编程,可以写出通用代理方法
public Object getProxy(Object target,Advice advice){ Proxy.newProxyInstance(..... ...... new InvocarionHandler(){ ... advice.before();//将系统功能封装到Advice类中 method.invoke(target,args); advice.after();//将系统功能封装到Advice类中 ... }}
详细请查看:http://edu.csdn.net/heima/
- 黑马程序员 动态代理
- 黑马程序员--代理
- 黑马程序员-java-代理
- 黑马程序员_代理
- 黑马程序员_java代理
- 黑马程序员:代理
- 黑马程序员_代理
- 黑马程序员-代理
- 黑马程序员-动态代理
- 黑马程序员 动态代理
- 黑马程序员-动态代理
- 黑马程序员--动态代理
- 黑马程序员-代理
- 黑马程序员 代理学习
- 黑马程序员--动态代理
- 黑马程序员-动态代理
- 黑马程序员-----代理
- 黑马程序员---------动态代理
- 关于青春
- cvGetSize与cvSize的区别
- Java中对象的复制/拷贝
- 第二章 变量和基本类型 (续1) 变量 & const 限定符
- socket
- 黑马程序员-----代理
- 配置Log4j(很详细)
- 红尘依梦
- The ultimate jQuery Plugin List ==JQuery插件列表
- dom4j解析XML时使用XPath直接定位至标签实例
- 新手学PL/SQL (1)
- 谷歌高管表示Android的开发之路才走到了1/3处
- 七夕情书之恋恋红尘
- java技术支持 任务十四 计算器