Java静态代理和动态代理的简单代码实现。
来源:互联网 发布:java数组按大小排序 编辑:程序博客网 时间:2024/05/29 19:51
静态代理:
package com.text.sgl;/** * 静态代理 * @author shen.guoliang * @version 1.0, 2017年8月27日 每次修改后更新版本号,日期和修改内容 * @see[相关类/方法] * @since[产品/模块版本] */interface ClothFactory{//制作衣服public void dowork();} //被代理对象class NakeCloth implements ClothFactory{@Overridepublic void dowork() {System.out.println("耐克生产的衣服!");}}//代理类class DailiCloth implements ClothFactory{NakeCloth nc;@Overridepublic void dowork() {nc.dowork();}public DailiCloth(NakeCloth nc){this.nc = nc;}}public class StaticText {public static void main(String[] args) {NakeCloth nc = new NakeCloth();DailiCloth dc = new DailiCloth(nc);dc.dowork();}}
动态代理:
package com.text.sgl;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 反射机制动态代理实例 * @author shen.guoliang * @version 1.0, 2017年8月27日 每次修改后更新版本号,日期和修改内容 * @see[相关类/方法] * @since[产品/模块版本] *///动态代理的使用//(这是将被实现的接口实例)interface Subject{//抽象方法void action();}//被代理类class RealSubject implements Subject{@Overridepublic void action() {System.out.println("我是被代理类,记得执行我奥!");}} //实现InvocationHandler接口的对象,用来动态生成代理类的对象等class MyInvocationHandler implements InvocationHandler{Object obj;//实现了接口的被代理类对象的声明//1:给被代理类对象实例化 2:返回一个代理类对象public Object blind(Object obj){this.obj = obj;return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);}//当通过代理类的对象发起被重写的方法的调用时,都会转换为对如下的invoke方法的调用@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//method方法的返回值是valueObject value = method.invoke(obj, args);return value;}}public class TestProxy {public static void main(String[] args) {//创建一个被代理类对象RealSubject rs = new RealSubject();//创建一个实现了InvocationHandler接口的自动生成代理类工具类对象MyInvocationHandler mh = new MyInvocationHandler();//调用blind()方法,动态返回一个实现Subject接口的代理类对象Object obj = mh.blind(rs);//强转Subject sbj = (Subject)obj;//执行action()方法其实转到对InvocationHandler接口的实现类的invoke()方法的调用,实际还是调的被代理对象重写的action()的方法,从而实现动态代理sbj.action();}}
阅读全文
0 0
- Java静态代理和动态代理的简单代码实现。
- 静态代理和动态代理的简单实现
- 静态代理和动态代理的简单实现
- java的静态代理和动态代理实现笔记
- java的静态代理和动态代理
- Java 的静态代理和动态代理
- java的动态代理和静态代理
- Java的静态代理和动态代理
- Java的静态代理和动态代理
- java的代理模式(动态代理和静态代理)
- Java的代理(Proxy)-静态代理和动态代理
- Java代理模式详解,静态代理和动态代理的实现
- Java中静态、动态代理的实现
- 静态代理和动态代理的实现方式
- java动态代理和静态代理的比较(含代码)
- Java 静态代理和动态代理
- Java 静态代理和动态代理
- Java 静态代理和动态代理
- nth-child()与nth-of-type()区别
- Java 内存模型
- Container With Most Water
- 如何修改MFC主窗口的大小
- 实现ViewPager懒加载的三种方法
- Java静态代理和动态代理的简单代码实现。
- CORS跨域资源共享你该知道的事儿
- Java多线程之通过管道线程间通信(字节流、字符流),类ThreadLocal与类InheritableThreadLocal的使用
- 内存溢出和内存泄漏
- Hibernate一
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
- easyui中在datagrid中右键出现菜单
- 关于Android studio 无法启动
- es6(2)