



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习下动态代理模式(关于代理的基础只是有很多帖子都有我就不重复了),做了个注解动态代理的例子,给那些学习注解或动态代理的初学者。花了将近1小时,没做个什么优化,大牛勿喷。几个主要的类:注解类:package test2;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD)public interface ProxyTag public Class proxyClass(); 代理类父类: import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public abstract class ProxyBean implements InvocationHandlerprivate Object o;private ProxyBean proxyBean;private String methodName;public Object bind(Object obj,ProxyBean proxyBean,String methodName)this.o = obj;xyBean = proxyBean;this.methodName = methodName;return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);public Object invoke(Object proxy, Method method, Object obj)throws Throwable if(method.getName().equals(methodName)proxyBean.before();Object result = method.invoke(o, obj);proxyBean.after();return result;elseObject result = method.invoke(o, obj);return result;public abstract void before();public abstract void after();代理工厂:import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ProxyFactory public static T getProxyBean(Class clazz)T t = (T) newInstance(clazz);Method methods = clazz.getMethods();for(int i=0;imethods.length;i+)ProxyTag pt = methodsi.getAnnotation(ProxyTag.class);if(pt = null)continue;ProxyBean pb = (ProxyBean) newInstance(xyClass();t = (T) pb.bind(t, pb, methodsi.getName();return t;private static Object newInstance(final Class clazz)try Constructor cons = clazz.getConstructor();return cons.newInstance(new Class); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (NoSuchMethodException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InstantiationException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalAccessException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InvocationTargetException e) / TODO Auto-generated catch blocke.printStackTrace();return null;测试类:package test2;public class ProxyClass extends ProxyBeanpublic void after() System.out.println(after.);public void before() System.out.println(before.);public class ProxyClass2 extends ProxyBeanpublic void after() System.out.println(after2.);public void before() System.out.println(before2.);public interface IDemo public void sayHello();public void sayHello2();public class Demo implements IDemoProxyTag(proxyClass=ProxyClass.class)public void sayHello()System.out.println(hello.);ProxyTag(proxyClass=ProxyClass2.class)public void sayHello2()System.out.println(hello2.); public class Test /* * param args */public static void main(String
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲状腺功能亢进芯片技术-洞察及研究
- 2025年墙纸设计与生产定制合同标准模板
- 2025版投标员实习期间职业道德教育合同
- 2025年健康养生中心经营管理合同范本
- 2025年度房抵工程款光伏组件生产项目合作协议
- 2025年度豪华学区二手房买卖协议
- 2025版全新杂物间租赁及物业管理服务合同文本
- 2025年度企业人才引进与委托培训一体化项目合同
- 2025年船舶保险与运输合同
- 2025二手楼赎楼担保与房产交易合同
- 家校携手同行砥砺奋进未来高二下学期期中家长会
- 购物中心突发事件或异常情况处理程序
- 安顺康闽果食品有限公司年产240吨年糕生产线建设项目环评报告
- 邹平梁邹矿业有限公司矿山地质环境保护与土地复垦方案
- 学校宿舍楼建筑装饰工程招标控制价编制技术经济分析
- 外脚手架监理实施细则
- 高考688个高频词汇 word版
- 氟化工艺课件
- 社会调查与统计第四章抽样
- 《国际结算(第五版)》第九章 跨境贸易人民币结算
- 2022年云南师范大学辅导员招聘考试试题及答案解析
评论
0/150
提交评论