动态代理
来源:互联网 发布: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
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- java数据结构和算法(GetDataUtil)
- yum安装Docker及入门使用
- vi/vim多行注释和取消注释
- Jenkins+Ant+Git持续集成
- Fedora删除旧内核版本
- 动态代理
- Elasticsearch使用Groovy脚本报错
- 第七周项目1-建立顺序环形队列算法库
- 第7周项目1-建立顺序环形队列算法库
- Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
- 数据库事务隔离级别
- 【WebGL】WebGL的坐标系统
- MAC下 JDK环境配置、版本切换以及ADB环境配置
- OC与JS之间的交互