欢迎来到天天文库
浏览记录
ID:57645903
大小:46.00 KB
页数:5页
时间:2020-08-30
《AOP标注-实例详解.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、AOP简介AOP(AspectOrientProgramming),也就是面向切面编程,作为面向对象编程的补充。面向切面编程(AOP)和面向对象编程(OOP)互为补充,面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面,可以这样理解,面向对象编程从静态角度考虑程序结构,面向切面编程是从动态角度考虑运行过程。AOP专门用来处理具有横切性质的系统服务,如事务管理、安全检查、缓存、对象池管理等。基本概念切面(Aspect):业务流程运行的某个特定步骤,也就是应用运行过程中的关注点,关注点可以横切多个对象,所以常常也称为
2、横切关注点。连接点(Joinpoint):程序运行过程中明确的点,如方法的调用,或者异常的抛出。SpringAOP中,连接点总是方法的调用。增强处理(Advice):AOP框架在特定在特定的切入点执行的增强处理。出来有”around”、”before”、”after”等类型。切入点(Pointcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。引入:将方法或者字段添加到被处理的类中。Spring允许引入新的接口到任何被处理的对象。目标对象(Target):被AOP框架进行
3、增强处理的对象,也被称为增强的对象。如果AOP框架是通过运行时代理来实现的,那么这个对象是一个被代理的对象。AOP代理:AOP框架创建的对象,简单地说代理就是对目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是DBLIB代理。前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程就是织入。织入有两种方式:编译时增强(AspectJ)和运行时增强(DGLIB)。AOP代理的方法AOP框架织入的增强处理AOP代理实际是由A
4、OP框架动态生成的一个对象,该对象包含了目标对象全部的方法。AOP的方法在特定的切入点添加增强处理,并回调了目标对象的方法。AOP框架织入的增强处理回调目标对象的方法代理对象的方法=增强处理+被代理对象的方法几种常用增强处理Before增强处理Before增强处理使用@Before来标注一个方法,需要指定一个value属性,该属性指定一个切入点表达式(既可以是一个已有的切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点。实例介绍://定义一个Before增强处理的切面@AspectpublicclassBeforeAdv
5、iceTest{//执行lee包下所有类的所有方法都将作为切入点@Before("execution(*kuozhan.before.*.*(..))")publicvoidauthority(){System.out.println("模拟执行权限检查");}}//lee类下定义一个Chiness类,该类使用@ComponentAnnotation进行标注@ComponentpublicclassChinessimplementsPerson{//实现Person接口的sayHello方法publicStringsayHello(String
6、name){returnname+"hello,SpringAOP!";}//实现Person接口的eat方法publicvoideat(Stringfood){System.out.println("我正在吃:"+food);}publicstaticvoidmain(String[]args){Chinessch=newChiness();System.out.println(ch.sayHello("luowz"));ch.eat("pie");}}使用Before增强处理只能在目标方法执行之前织入增强,使用Before增强处理无需理会目
7、标方法的执行,所以Before处理无法阻击目标方法的执行。AfterReturning增强处理After增强处理使用@AfterReturning来标注一个AfterReturning增强处理,目标方法完成后将被织入。需要指定的两个常用的属性:pointcut/value:两个属性作用是一样的,用于指定切入点对应的切入表达式。当指定pointcut属性值后,value属性值将被覆盖。returning:指定一个返回值形参名,增强处理定义的方法可通过该形参名来访问目标方法的返回值。@AspectpublicclassAfterReturningT
8、est{//执行lee包下所有类的所有方法都将作为切入点@AfterReturning(pointcut="execttion(*kuozhan.af
此文档下载收益归作者所有