博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理
阅读量:5278 次
发布时间:2019-06-14

本文共 1972 字,大约阅读时间需要 6 分钟。

public interface Animal {        void  eat();    void  sleep();    }
Animal接口
public class Dog implements Animal {    @Override    public void eat() {        System.out.println("Dog吃骨头");    }    @Override    public void sleep() {        System.out.println("Dog睡觉");    }}
Dog实现类
/** *  * 代理模式: *  代理类和委托类 都有相同的接口!代理类 为  委托类做一些方法的处理! *  但是  真正执行的还是委托类中的代码!代理类之不过是在方法之前或者之后做了增强处理! *  代理类和委托类之间通常是有关系的! *   *  JDK动态代理:  必须要委托类  实现了接口 *    InvocationHandler接口  位于  java.lang.reflect包下 *    该接口中  只有一个方法 *    public Object invoke(Object proxy, Method method, Object[] args) *    proxy:代理类 *    method:被代理的方法 *    args:方法中的参数数组 *     *   想使用一个代理类   需要两个条件 *   01.实现 InvocationHandler接口 *   02.使用Proxy类 *       public static Object newProxyInstance(ClassLoader loader,                      Class
[] interfaces, InvocationHandler h) * loader:委托类的类加载器 * interfaces:得到委托类实现的所有接口 * h:InvocationHandler的实现类 */public class MyProxy implements InvocationHandler{
//代理类 //01.声明一个委托类对象 private Object target; //02.给我一个委托类,我返回给你一个代理类对象 public Object createProxyInstance(Object target){ this.target=target; return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } //03.给方法 做增强 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("目标类方法执行之前......."); Object result = method.invoke(target, args); System.out.println("目标类方法执行之后......."); return result; } public static void main(String[] args) { //实例化代理对象 MyProxy proxy=new MyProxy(); //给我一个委托类,我返回给你一个代理类对象 Animal animal=(Animal) proxy.createProxyInstance(new Dog()); animal.eat(); System.out.println("***********"); animal.sleep(); }}
自定义代理类以及测试方法

 

转载于:https://www.cnblogs.com/999-/p/6061407.html

你可能感兴趣的文章
敏捷的最佳实践-3
查看>>
map reduce filter
查看>>
今天入住园子了
查看>>
20162319 莫礼钟 预备作业02
查看>>
数字的可视化:python画图之散点图sactter函数详解
查看>>
116. Populating Next Right Pointers in Each Node (Tree; WFS)
查看>>
uva 11991 Easy Problem from Rujia Liu
查看>>
[PhoneGap] 开篇: Web开发工程师染指手机App的利器
查看>>
140717
查看>>
划分型动态规划 之 CODE[VS] 1040 统计单词个数 2001年NOIP全国联赛提高组
查看>>
使用 PHP 验证表单数据
查看>>
内存分布
查看>>
asp.net中http接口的开发
查看>>
C#实现动态引用外部的Javascript,CSS
查看>>
XMLHttpRequest对象的属性与方法
查看>>
Pots bfs
查看>>
Python Indentation
查看>>
setInterval()与setTimeout()的区别
查看>>
PhoneGap API帮助文档翻译—File(文件)
查看>>
混合开发模式下主流移动开发平台分析
查看>>