第18章 类加载机制与反射-JDK动态代理
来源:互联网 发布:虎视眈眈单人动作数据 编辑:程序博客网 时间:2024/06/04 19:47
- 两个重点: Proxy类和InvocationHandler接口
1.定义接口
2.定义动态代理的对象,该对象实现接口
3.定义通用方法的类,该类中定义通用方法(例如记录开始日志方法,结束日志方法)
4.定义实现InvocationHandler的方法(调用通用方法,使用反射调用被代理对象的方法)
5.定义动态代理对象工厂类,即根据target生成动态代理对象
6.测试
// 1.定义接口public interface Dog { void info(); void run();}
// 2.定义动态代理的对象,该对象实现接口public class DogUtil { // 第一个拦截器方法 public void method1(){ System.out.println("模拟第一个通用方法"); } // 第二个拦截器方法 public void method2(){ System.out.println("模拟第二个通用方法"); }}
public class GunDog implements Dog{ @Override public void info() { System.out.println("我是只猎狗!"); } @Override public void run() { System.out.println("我跑的很快!"); }}
public class MyInvocationHandler implements InvocationHandler { // 需要被代理的对象 private Object target; public void setTarget(Object target) { this.target = target; } @Override public java.lang.Object invoke(java.lang.Object proxy, Method method, java.lang.Object[] args) throws Throwable { // 通用方法一 例如日志开始 DogUtil du = new DogUtil(); du.method1(); // info() run() 以target作为主调来执行method方法 // 此处为被代理对象,本身执行的方法 java.lang.Object result=method.invoke(target,args); // 通用方法二 例如日志结束 du.method2(); return result; }}
public class MyProxyFactory { // 为指定的target生成动态代理对象 public static java.lang.Object getProxy(Object target){ MyInvocationHandler handler = new MyInvocationHandler(); handler.setTarget(target); // 返回动态代理对象 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler); }}
public class MyProxyTest { public static void main(String[] args) { Dog target = new GunDog(); Dog dog = (Dog)MyProxyFactory.getProxy(target); dog.info(); dog.run();// 输出结果:// 模拟第一个通用方法// 我是只猎狗!// 模拟第二个通用方法// 模拟第一个通用方法// 我跑的很快!// 模拟第二个通用方法 }}
0 0
- 第18章 类加载机制与反射-JDK动态代理
- java_IO,反射机制,jdk动态代理
- 反射机制与动态代理
- JAVA类加载机制与反射,动态代理Proxy串联分析与应用
- 第8章 Java的反射机制、Java的代理机制、类加载
- jdk动态代理(动态生成字节码与反射机制的结合)
- java反射机制与动态代理
- Java反射机制与动态代理
- JAVA的反射机制与动态代理
- JAVA反射机制与动态代理
- java反射机制与动态代理
- java反射机制与动态代理
- java反射机制与动态代理
- JAVA的反射机制与动态代理
- JAVA反射机制与动态代理
- Java 动态代理与反射机制
- JAVA反射机制与动态代理
- JAVA反射机制与动态代理
- 每日打卡 2017.04.16 前缀和
- 大盗阿福
- 版本比较
- Spring在基于java的配置中使用prop属性
- MySQl之最全且必会的sql语句
- 第18章 类加载机制与反射-JDK动态代理
- printf
- AR 学习记录 unity+vuforia+ android 初次搭建
- c语言之文件加密
- Codeforces 797C Minimal String 贪心+模拟
- Java加载dll或so库文件的路径 java.library.path
- struts2总结笔记之二
- 剑指offer-面试题 15:链表中倒数第 k 个结点
- VMware Workstation安装CentOS7图文详细教程