下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、自己实现简易版aop,含aop实现的步骤分解思路收拾:1.涉及的角色:被代理类;被代理类要实现的接口;代理类;动态创建代理类的对象的类;注解类(注解在办法上);ioc容器:beanfactory(自己实现ioc容器:2.实现步骤:(1)被代理类、被代理类的接口、inoutlog注解类的创建;(2)创建一个动态代理类,并把被代理类的实例传给该代理类;在该动态代理类的invoke()办法中,实现日志的输出,也是在该invoke()办法中调用、执行真正的代理类要执行的那个办法。(3)创建一个可以动态创建代理类的实例的类,通过该类的getproxyinstance(objectobj)办法可以得到一个
2、动态代理类的实例。(4)给办法加通知注解,该办法的实例须已交由ioc容器管理的;(5)遍历beanfactory,找出办法上有inoutlog注解的bean,为这些bean生成代理类对象(步骤:myproxy3.getproxyinstance(objectobj));(6)用代理类的实例去替代beanfactory中的被代理类的实例;三、代码实现:被代理类的接口:packagemyiocandmyaop.bean;publicinterfacesubjectvoidtest();被代理类:1packagemyiocandmyaop.bean;23importmyiocandmyaop.ann
3、otations.inoutlog;4importmyiocandmyaop.annotations.myautowired;5importmyiocandmyaop.annotations.mycomponent;67/*8*被代理类9*/10mycomponent11publicclasspersonimplementssubject1213myautowired14privatestudentstudent;1516inoutlog17publicvoidtest()18system.out.println(this+".test():"+student);1920i
4、noutlog注解类:packagemyiocandmyaop.annotations;importjava.lang.annotation.elementtype;importjava.lang.annotation.retention;importjava.lang.annotation.retentionpolicy;importjava.lang.annotation.target;target(elementtype.method)retention(retentionpolicy.runtime)publicinterfaceinoutlog动态代理类:publicclassmyi
5、nvocationhandler2implementsinvocationhandlerprivateobjectobject;/被代理类privateobjectinvoke;publicvoidsetobject(objectobject)this.object=object;/*在beanfactory中,办法上有inoutlog注解,则生成动态代理办法*/overridepublicobjectinvoke(objectproxy,methodmethod,objectargs)throwsthrowable/这里做推断,看是否需要做下面的输出booleanbool=false;/!注
6、重,要用被代理类的对象去推断其method办法上是否有inoutlog注解,而不是用入参method对象(该method对象是被代理类的接口的)/怎么处理入参的类型:见myaop2.这里没有做入参处理,可能会报办法找不到异样,注重!methoddeclaredmethod=object.getclass().getdeclaredmethod(method.getname();if(null!=declaredmethod.getannotation(inoutlog.class)system.out.println("我是日志输出start");bool=true;inv
7、oke=method.invoke(object,args);/这里做推断,同上if(bool)system.out.println("我是日志输出end");system.out.println("-");returninvoke;动态创建代理类的对象的类:publicclassmyproxy2/*动态的创建一个代理类的对象*myproxy动态创建的代理类的对象:*classaimplementssubject*privatehandlerhandler;*publicvoidtest()*/获得到当前办法名*handler.invoke();*/pu
8、blicstaticobjectgetproxyinstance(objectobj)myinvocationhandler2handler=newmyinvocationhandler2();handler.setobject(obj);returnproxy.newproxyinstance(obj.getclass().getclassloader(),obj.getclass().getinterfaces(),handler);/*对于有inoutlog注解的,用代理类的bean来替代beanfactory中的被代理类的bean。*这一步很重要,由于当执行到bean.method()
9、,执行的就一定是bean对应的method()办法,*假如此时没实用代理类对象去替换,那么执行的就是没有inoutlog的本来的那个办法。*/publicstaticvoidupdatebean(stringcompleteclassname,objectobject)myioc.updatebeanfrombeanfactory(completeclassname,getproxyinstance(object);/(全类名,代理类的bean)扫描beanfactory,找出办法上有inoutlog注解的bean,为其创建代理类对象,并替代原bean。用法测试:publicclassmyao
10、p2publicstaticvoidmain(stringargs)/*用法步骤:*給指定类的某个办法加inoutlog注解;*通过beanfactory或的该类的实例;*执行bean.method();*效果:method()办法的前后有了log的输出。*/stringcompleteclassname="myiocandmyaop.bean.person"objectbean=myioc.getbean(completeclassname);subjectperson=(subject)bean;person.test();staticinit();publicstaticvoidinit()updatebeanfrombeanfactory();/*扫描beanfactory,找出办法上有inoutlog注解的bean,为其创建代理类对象,并替代原bean。*/publicstaticvoidupdatebeanfrombeanfactory()for(map.entryentry:myioc.getbeanfactory().entryset()for(meth
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职汽车美容(轮毂修复技术)试题及答案
- 2025年高职蜂学(蜜蜂养殖技术)试题及答案
- 2025年中职数字媒体(动画制作)试题及答案
- 2025年高职体育教学实践(体育实践)试题及答案
- 2026年中职第二学年(网络推广)搜索引擎优化试题及答案
- 2026年建筑设计(功能设计)综合测试题及答案
- 2026年预算员工程师(工程预算培训方案设计)综合测试题及答案
- 2025年大学二年级(智慧农业技术)精准施肥综合测试题及答案
- 2026年中医养生保健师(中医养生基础)试题及答案
- 2026年中职第一学年(农业机械使用与维护)农机操作阶段测试题及答案
- 广西贵百河2025-2026学年高一上学期12月联考语文试题
- 2025四川航天川南火工技术有限公司招聘考试题库及答案1套
- 广东广电网络2026届秋季校园招聘185人备考题库完整答案详解
- 2025年度皮肤科工作总结及2026年工作计划
- (一诊)成都市2023级高三高中毕业班第一次诊断性检测物理试卷(含官方答案)
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
- 2024江苏无锡江阴高新区招聘社区专职网格员9人备考题库附答案解析
- 2025西部机场集团航空物流有限公司招聘笔试考试备考试题及答案解析
- 智能制造执行系统(MES)应用案例教程 课件全套 项目1-9 生产工序开工、报工和检验 -特殊生产情况管理
- 工程签证与索赔专题分享
- 植入类器械规范化培训
评论
0/150
提交评论