Java动态代理模式
编程技术  /  houtizong 发布于 3年前   56
//抽象接口public interface Subject{ public void request();}
//具体角色RealSubject:实现了Subject接口的request()方法。public class RealSubject implements Subject{ public void request(){ System.out.println("From real subject."); } }
//代理角色:import java.lang.reflect.Method;import java.lang.reflect.InvocationHandler;public class DynamicSubject implements InvocationHandler{ private Object sub; public DynamicSubject(Object sub){ this.sub = sub; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before calling " + method); method.invoke(sub,args); System.out.println("after calling " + method); return null; }}
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class Client{ static public void main(String[] args) throws Throwable{ RealSubject rs = new RealSubject(); //在这里指定被代理类 InvocationHandler ds = new DynamicSubject(rs); //初始化代理类 Class cls = rs.getClass(); Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),ds); subject.request();}
package com.zx.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxySubject implements InvocationHandler {private Object obj; //需要被代理的类public ProxySubject(Object obj){this.obj=obj;} /** * 创建一个动态代理类的工厂 * @param obj 需要被代理的类 * @return 返回被代理类实现的接口 */public static Object factory(Object obj){ Class<?> cla=obj.getClass(); InvocationHandler handler=new ProxySubject(obj);return Proxy.newProxyInstance(cla.getClassLoader(), cla.getInterfaces(), handler);}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {preRequest(method);Object result=method.invoke(obj, args);postRequest(method);return result;}public void preRequest(Method method){System.out.println("before invoke: "+method.getName());}public void postRequest(Method method){System.out.println("after invoke: "+method.getName());}}
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接