设计模式(二)——代理模式 (2)

再来一个JDK动态代理的实例:

JDK动态代理 接口 package com.example.jdkproxy; public interface Person {    public void dosomething(); } 实现类 package com.example.jdkproxy; public class Bob implements Person{ @Override public void dosomething() { System.out.println("Bob do something."); } } 获取代理类 package com.example.jdkproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @author liuyj * @Title: JDKDynamicProxy * @create 2020-06-02 17:30 * @ProjectName test * @Description: JDK动态代理 */ public class JDKDynamicProxy implements InvocationHandler { //声明被代理的对象 private Person person; //构造函数 public JDKDynamicProxy(Person person) { this.person = person; } //获取代理对象 public Object getTarget(){ Object proxyInstance = Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), this); return proxyInstance; } //代理对象执行方法的时候都会执行此方法 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("对原方法进行前置增强。"); //原方法执行 Object invoke = method.invoke(person, args); System.out.println("对原方法进行后置增强。"); return invoke; } } 测试类 package com.example.jdkproxy; public class ProxyTest { public static void main(String[] args) { System.out.println("不使用代理类。。。"); Person person=new Bob(); person.dosomething(); System.out.println("--------------"); System.out.println("使用代理类。。。"); Person proxy = (Person) new JDKDynamicProxy(new Bob()).getTarget(); proxy.dosomething(); } } 执行结果

设计模式(二)——代理模式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppgxp.html