一.理解Aop
1.什么是Aop
Aop(Aspect Oriented Programming),意为面向切面编程。
利用Aop对业务逻辑的各个部分来进行隔离,可降低业务逻辑各部分之间耦合度,可提高程序重用,和开发效率。
如何来理解这个切面?
首先在开发过程中,关注点在业务是从业务着手,由众多功能组成一块业务。面向切面就不关注业务,从功能着手,将一个通用功能从众多业务类中分离出来独立成类,使众多类来共享这一通用功能,当这一通用功能发生变化,我们只需要修改这一个类,而不需要去修改其他的类,此时该类就可以看作一个切面。简单来说,Aop就是将通用功能抽取出来。面向切面,就是关注通用功能,而不关注业务。OOP(面对对象编程)是关注业务的,这是它们的区别。
2.Aop有什么用
1)将通用功能从业务逻辑中抽取出来,提高代码的复用性,有利于后期维护和扩展
2)设计系统时,抽出通用功能(切出切面),降低系统架构的复杂度
3.Aop应用场景
过滤器其实就是Aop的一种实现、日志记录、授权认证、事务管理、错误处理等等
4.如何使用Spring Aop
核心概念:
切面(Aspect):类是物体特征的抽象,切面就是对横切关注点(通用功能)的抽象
连接点(Joint Point):被拦截到的点,Spring中只支持方法类型的连接点,所以在Spring中连接点就是指被拦截到的方法
切入点(Pointcut):对连接点进行拦截的定义
通知(Advice):通知就是指拦截到连接点之后要执行的代码
织入(Weave):将切面应用到目标对象并导致代理对象创建的过程
引入(Introdution):在不修改代码的前提下,引入可以在运行期为类动态的添加一些方法或字段
Aop编程主要参与三步(使用注解方式,xml配置方式可自行了解):
1)定义业务组件
@Aspect注解标识切面类
2)定义切入点
@Pointcut注解标识切入点
两个常用表达式:execution()、annotation()
execution(<修饰符模式>? <返回类型模式> <方法名模式>(<参数模式>) <异常模式>?)
返回类型模型、方法名模型、参数模型三项必选,其他可选
@Pointcut("execution(* com.example.spring..*.*(..))")
第一个代表所有返回类型,表示所有
com.example.spring….(…) :com.example.spring包地址,后面两个点表示当前包和当前包的所有子包,接下来的表示所有类,再接下来的表示所有方法,(…)表示任何参数
3)通知处理
有下面五类通知
通知类型 | 简介 |
---|---|
@Before(前置) | 被拦截方法调用之前执行 |
@After(后置) | 被拦截方法调用之后执行 |
@AfterThrowing(异常) | 被拦截方法抛出异常后执行 |
@AfterReturning(最终) | 被拦截方法执行成功后执行(遇到异常不执行) |
@Around(环绕) | 相当于合并了前置和后置也能进行异常 |