下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 团队建立方案
- 2026年吐鲁番市消防救援支队面向社会公开招聘政府专职消防员16人备考题库完整参考答案详解
- 2026年中国石化销售股份有限公司山东滨州邹平石油分公司招聘备考题库及完整答案详解一套
- 2026年内蒙古恒科新材料科技有限公司招聘备考题库完整答案详解
- 2026年中煤建设集团有限公司企业技术中心面向社会公开招聘工作人员的备考题库完整答案详解
- 2025年中共永兴县委巡察工作领导小组办公室公开选调工作人员备考题库及完整答案详解一套
- 2026年保卫处经警招聘备考题库有答案详解
- 2025年甘肃省兰州市心连心社会工作服务中心招聘备考题库参考答案详解
- 2026年平新社区卫生服务中心公开招聘备考题库参考答案详解
- 2026年中国建筑一局(集团)有限公司深圳分公司招聘备考题库及答案详解参考
- 肿瘤化疗导致的中性粒细胞减少诊治中国专家共识解读
- 2025年查对制度考核考试题库(答案+解析)
- 云南省2025年普通高中学业水平合格性考试历史试题
- 骨关节疾病危害课件
- 《再见2025欢迎2026》迎新年元旦主题班会
- 猫屎咖啡介绍
- DB54T 0540-2025 区域性强降雨气象评估标准
- 2025-2026 学年三年级 道德与法治 随堂检测 试卷及答案
- 广西贵百河2025-2026学年高一上学期12月联考语文试题
- 《手术室护理实践指南(2025版)》
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
评论
0/150
提交评论