Spring学习十三----------Spring AOP的基本概念

© 版权声明:本文为博主原创文章,转载请注明出处

什么是AOP

-面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

-主要的功能是:日志记录、性能统计、安全控制、事务处理、异常处理等

AOP实现方式

-预编译

  -AspectJ

-运行期动态代理(JDK动态代理、CGLib动态代理)

  -Spring AOP、Jboss AOP

AOP相关概念

-切面(Aspect)           一个关注点的模块化,这个关注点可能会横切多个对象

-连接点(Joinpoint)         程序执行过程中的某个特定的点

-通知(Advice)           在切面的某个特定的连接点上执行的动作

-切入点(Pointcut)          匹配连接点的断言,在AOP中通知和一个切入点表达式关联

-引入(Introduction)         在不修改类代码的前提下,为类添加新的方法和属性

-目标对象(Target Object)     被一个或者多个切面所通知的对象

-AOP代理(AOP Proxy)        AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能) 

-织入(Weaving)           把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载时织入、执行时织入

Advice的类型

-前置通知(Before advice)                  在某连接点(join point)之前执行的通知,但不能阻止连接点前的执行(除非它抛出一个异常)

-返回后通知(After returning advice)     在某连接点(join point)正常完成后执行的通知

-抛出异常后通知(After throwing advice)    在方法抛出异常退出时执行的通知

-后通知(After(finally) advice)       当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)

-环绕通知(Around Advice)                包围一个连接点(join point)的通知

Spring中AOP的用途

-提供了声明式的企业服务,特别是EJB的替代服务的声明

-允许用户定制自己的方面,以完成OOP和AOP的互补使用

Spring的AOP实现

-纯Java实现,无需特殊的编译过程,不需要控制类加载器层次

-目前只支持方法执行连接点(通知Spring Bean的方法执行)

-不是为了提供最完整的AOP实现;而是侧重于提供一种AOP实现和Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题

-Spring AOP不会和AspectJ竞争,从而提供综合完整的AOP解决方案

Spring AOP的代理方式

-默认使用标准的JavaSE动态代理作为AOP代理,使得任何接口(接口集)都可以被代理

-如果一个业务对象并没有实现一个接口,也可以使用CGLIB代理

参考:http://www.imooc.com/video/4418

posted @ 2017-04-25 10:32  禁忌夜色153  阅读(205)  评论(0编辑  收藏  举报