面向切面编程(AOP)提供另一种角度来思考程序结构,通过这种方式弥补了
面向对象编程(OOP)的不足,除了类(classes)以外,AOP提供了切面。
切面对关注点进行模块化,例如横切多个类型和对象的事务管理。
Spring的一个关键的组件就是Aop框架,可以自由选择使用AOP提供声明式企业服务,特别是为了替代EJB声明式服务。最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事务管理上,允许用户自定义切面,用AOP来完善OOP的使用,可以把Spring Aop看做是对Spring的一种增强!
AOP里面重要名词解释:
切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象,事务管理是j2ee应用中的一个关于和企鹅关注点的很好的例子。在Spring AOP中,切面可以使用通用类或者普通类中以@Aspect注解来实现。
AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约(包括通知方法执行等功能),在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。
目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。POJO
前置增强:在某个链接之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)
返回后增强:在某个链接正常完成执行的通知。例如:一个方法没有抛出任何异常,正常返回。
抛出异常后增强:在方法抛出异常退出时执行后的通知。
后置增强:当某连接点退出的时候执行的通知。(不论是正常返回还是异常退出)
环绕增强:包围一个连接点的通知。如方法的调用,这是最强大的一种通知类型,环绕增强可以在方法调用前后完成自定义的行为,它也会选择是否继续执行连接点或直接返回他们自己的返回值或抛出异常来结束执行。
环绕增强是最常见的一种通知类型,大部分基于拦截的AOP框架,例如nanning和Jboss4
AOP的优点:
1-降低模块之间的耦合度。
2-使系统容易扩展。
3-更好的代码复用。
AOP的应用场景:
1.日志处理
2.用户登录
3.权限(Authentication )
4.性能优化(Performance optimization)
5.事务(Transactions )
6.记录跟踪 优化 校准(logging, tracing, profiling and monitoring)
7.调试(Debugging)
8.懒加载(Lazy loading)
9.错误处理(Error handling)
10.资源池(Resource pooling)
11.同步(Synchronization)