欢迎来到天天文库
浏览记录
ID:30789624
大小:205.53 KB
页数:16页
时间:2019-01-03
《spring实践:aop-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Spring实践:AOP-编程开发技术Spring实践:AOP原文出处:翡青AOP引介AOP(^AspectOrientedPrograming)面向切面编程采用横向抽取机制,以取代传统的纵向继承体系的重复性代码(如性能监控/事务管理/安全检杳/缓存实现等).横向抽取代码复用:基于代理技术,在不修改原来代码的前提下,对原有方法进行增强.SpringAOP历史•1.2开始,Spring开始支持AOP技术(SpringAOP)SpringAOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码.•2.0之后,为了简化AOP开发,
2、Spring开始支持Aspect;(—个基于Java的AOP框架)框架.AOP相关术语术语中文描述JoinpointPointcutAdvice连接指那些被拦截到的点.在Spring中,这些点指方法(因为Spring只支持方法点类型的连接点).切:指需要(配置)被增强的Joinpoint.点通知/指拦截到Joinpoint后要做的操作.通知分为前置通知/后置通知/界常通知/增强最终通知/环绕通知零.Aspect切面切入点和通知的结合.Target目标对象需要被代理(增强)的对象.Proxy代理对象日标对象被AOP?织入?增强/通知后产生的对象术语中文描述Weavin
3、g指把增强/通知应川到目标对象來创建代理对象的过程(Spring采川动态代理织入,Aspect;采用编译期织入和类装载期织入).Introduction»入一种特殊通知,在不修改类代码的前提下,可以在运行期为类动态地添加引介一些Method/Field(不常用).其他关于AOP理论知识可参考AOP技术研究.AOP实现SpringAOP代理实现冇两种:JDK动态代理和Cglib框架动态代理,JDK动态代理可以参考博客代理模式的动态代理部分,在这里仅介绍CGLib框架实现.cglib动态代理cglib(CodeGenerationLibrary)是一个开源/高性能/高质
4、量的Code生成类库,可以在运行期动态扩展Java类与实现Java接口.cglib比java.lang,reflect.Proxy更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法(cglib项口)•从3.2开始,spring-core包屮内置cglib类,因此可以不用添加额外依赖.•UserDAO(并没有实现接口)/***@authorjifang*©since16/3/3上午11:16.*/publicclassUserDAO{publicvoidadd(Objecto){System,out.printIn("UserDAO->Add:"+o.toS
5、tringO);}publicvoidget(Objecto){System,out.println(,zUscrDAO->Get:"+o.toString());•CGLibProxyFactorypublicclassCGLibProxyFactory{privateObjecttarget;publicCGLibProxyFactory(Objecttarget){this.target二targct;}privateCallbackcallback二newMethodinterceptor(){/****©paramobj代理对彖*@parammethod当
6、期调用方法*@paramargs方法参数*@paramproxy被调用方法的代理对象(用于执行父类的方法)*©return*©throwsThrowable*/©OverridepublicObjcctintcrccpt(Objcctobj,Methodmethod,Objcct[]args,MethodProxyproxy)throwsThrowable{//前置增强System,out.println(〃+BeforeAdvice•••〃);//执行目标方法//Objectresult=method,invoke(target,args);Objectresul
7、t二proxy•invoke(target,args);//后置增强System,out.printin(〃+AfterAdvice•••〃);returnresult;}};publicObjectcreateProxy(){//1.创建Enhancer对象Enhemcorenhemcor二newEnhemcor();//2.eglib创建代理,对目标对彖创建子对彖enhancer.setSuperclass(target.getClass());//3.传入回调接口,对目标增强enhancer.setCallback(callback);returnenha
此文档下载收益归作者所有