Proxy动态代理
来源:互联网 发布:centos kde gnome共存 编辑:程序博客网 时间:2024/05/18 23:12
Proxy动态代理
什么是动态代理
说起动态,其实不如先说什么是静态。所谓静态代理,个人理解为自己手写的代理类,或者用工具生成的代理类,或者别人帮你写的代理类。总之,就是程序运行前就已经存在的编译好的代理类。 相反,如果代理类程序运行前并不存在,需要在程序运行时动态生成(无需手工编写代理类源码),那就是今天要说的动态代理了
注意:动态代理的类必须要有接口
动态代理的内部原理是:Java的反射机制
请看下面的代码示例
Person接口
package cn.csx.proxy;public interface Person {String sing(String name);String dance(String name);}
具体类:Liyuechun
package cn.csx.proxy;public class Liyuechun implements Person {public String sing(String name){System.out.println("春哥唱"+name+"歌!!");return "飞吻!!";}public String dance(String name){System.out.println("春哥跳"+name+"舞!!");return "多谢多谢老板!!";}}
代理
public static Object newProxyInstance(ClassLoaderloader,Class<?>[]interfaces, InvocationHandler h)
ClassLoaderloader:代理类的类加载器
Class<?>[]interfaces:代理类所实现的接口列表(与真实主题类的接口列表一致)
InvocationHandler h:所指派的调用处理程序类
public class LiyuechunProxy {private Person chunchun = new Liyuechun();// Person person = LiyuechunProxy.getProxy();// person.sing("山歌") person.dance();public Person getProxy(){return (Person) Proxy.newProxyInstance(LiyuechunProxy.class.getClassLoader(), chunchun.getClass().getInterfaces(), new InvocationHandler(){/** * proxy : 把代理对象自己传递进来 * method:把代理对象当前调用的方法传递进来 * args:把方法参数传递进来 */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//编码指定返回的代理对象干的工作if(method.getName().equals("sing")){System.out.println("搞一万块钱来!!");return method.invoke(chunchun, args); //找春哥唱歌}if(method.getName().equals("dance")){System.out.println("搞2万块钱来!!");return method.invoke(chunchun, args); //找春哥跳舞}return null;}});}}
说起动态,其实不如先说什么是静态。所谓静态代理,个人理解为自己手写的代理类,或者用工具生成的代理类,或者别人帮你写的代理类。总之,就是程序运行前就已经存在的编译好的代理类。 相反,如果代理类程序运行前并不存在,需要在程序运行时动态生成(无需手工编写代理类源码),那就是今天要说的动态代理了
注意:动态代理的类必须要有接口
动态代理的内部原理是:Java的反射机制
请看下面的代码示例
Person接口
package cn.csx.proxy;public interface Person {String sing(String name);String dance(String name);}
具体类:Liyuechun
package cn.csx.proxy;public class Liyuechun implements Person {public String sing(String name){System.out.println("春哥唱"+name+"歌!!");return "飞吻!!";}public String dance(String name){System.out.println("春哥跳"+name+"舞!!");return "多谢多谢老板!!";}}
代理
public static Object newProxyInstance(ClassLoaderloader,Class<?>[]interfaces, InvocationHandler h)
ClassLoaderloader:代理类的类加载器
Class<?>[]interfaces:代理类所实现的接口列表(与真实主题类的接口列表一致)
InvocationHandler h:所指派的调用处理程序类
public class LiyuechunProxy {private Person chunchun = new Liyuechun();// Person person = LiyuechunProxy.getProxy();// person.sing("山歌") person.dance();public Person getProxy(){return (Person) Proxy.newProxyInstance(LiyuechunProxy.class.getClassLoader(), chunchun.getClass().getInterfaces(), new InvocationHandler(){/** * proxy : 把代理对象自己传递进来 * method:把代理对象当前调用的方法传递进来 * args:把方法参数传递进来 */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//编码指定返回的代理对象干的工作if(method.getName().equals("sing")){System.out.println("搞一万块钱来!!");return method.invoke(chunchun, args); //找春哥唱歌}if(method.getName().equals("dance")){System.out.println("搞2万块钱来!!");return method.invoke(chunchun, args); //找春哥跳舞}return null;}});}}
0 0
- Java Proxy动态代理
- 动态代理Proxy
- Java 动态代理 Proxy
- 动态代理(Proxy)
- 动态代理 Proxy InvocationHandler
- Proxy 动态代理。。。
- 动态代理proxy ,InvocationHandler
- Java_动态代理Proxy
- Java动态代理Proxy
- 动态代理Proxy
- 动态代理proxy
- 动态代理 - proxy & InnovationHandler
- proxy动态代理
- 动态代理(Proxy)
- proxy 动态代理
- 动态代理Proxy
- Proxy动态代理
- 动态代理 Proxy InvocationHandler
- Add Binary
- 设计模式之适配器模式(Adapter)
- SQL注入详解
- 六,可变变量
- POJ 2411 Mondriaan's Dream(状态压缩DP)
- Proxy动态代理
- Struts2 标签的使用
- Android完全退出程序,不是返回到上一个Activity
- ARM 编译选项的默认关系 001
- Android Google Maps 开始
- SSH连接的时候Host key verification failed
- opencv-ios开发笔记6 利用canny简单提取轮廓
- 快速学习者的高效学习策略
- HDU 1058||Uva 136 丑数