动态代理

来源:互联网 发布:python 入门教程 编辑:程序博客网 时间:2024/05/21 04:18
<pre name="code" class="java">package com.zyp.dynamicProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public abstract class ProxyFactory<T> implements InvocationHandler {private T delegate;// 委托类对象public ProxyFactory(T delegate) {this.delegate = delegate;// 构造函数初始化委托类对象(也叫目标对象)}/** * 获取代理对象,调用委托类具体的实现方法 *  * @return */@SuppressWarnings("unchecked")public T getProxy() {Class<T> cls = (Class<T>) delegate.getClass();if (cls.getInterfaces() != null) {return (T) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(), this);}return delegate;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Object o = null;try {before(args);o = method.invoke(delegate, args);// 调用目标对象方法after(args);} catch (Exception e) {onException(e);// 错误时的处理逻辑}return o;}/** * 调用方法前处理 *  * @param args */public abstract void before(Object[] args);/** * 调用方法后处理 *  * @param args */public abstract void after(Object[] args);/*** * 出现异常时处理 *  * @param ex */public abstract void onException(Exception ex);}
package com.zyp.dynamicProxy;/** * 代理工具类,继承工厂类实现拦截 * @author Administrator * * @param <T> */public class FactoryUtil<T> extends ProxyFactory<T>{public FactoryUtil(T delegate) {super(delegate);}@Overridepublic void before(Object[] args) {System.out.println("----------enter method------------");}@Overridepublic void after(Object[] args) {System.out.println("----------end method------------");}@Overridepublic void onException(Exception ex) {System.out.println("error occurs---->:"+ex);}public static void main(String[] args) throws Exception {TargetInterface ti=new TargetInterfaceImpl();TargetInterface proxy = new FactoryUtil<TargetInterface>(ti).getProxy();//目标的代理实例  proxy.say("hellllll");//异常调用proxy.say(null);}}



                                             
0 0
原创粉丝点击