-
Crocss Cutting Concern(横切性的关注点)
— 是一种独立服务。遍布在系统的各个角落里,或者是处理流程之中。 -
通知(Advice)
— 对横切性关注点的具体实现
通知中分为5种类型:
Before:
在方法被调用之前调用
After:
在方法完成后调用通知,无论方法是否执行成功
After-returning:
在方法成功执行之后调用通知
After-throwing:
在方法抛出异常后调用通知
Around:
通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为
-
连接点(JoinPoint)
— 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
只要记住,和方法有关的前前后后(抛出异常),都是连接点。 -
切入点(Pointcut)
— 定义了Advice应用到哪些JointPoint上,对Spring来说是方法的调用
你的一个类里,有15个方法,那就有几十个连接点了对吧,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
描述方式:
1. 直接指定 Jointpoint 所在的方法名, 功能比较单一, 通常只支持方法级别的 AOP 框架
2. 正则表达式
3. 特定的描述语言, 如 AspectJ 提供的 Pointcut 描述语言
-
切面(Aspect)
— 对横切性关注点的模块化
是切点和通知的结合。通知和切点共同定义了关于切面的全部内容,它是什么时候,在何时和何处完成功能 -
引入(Introduction)
— 可以动态的为类添加方法 -
织入(Weaving)
— 将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入
这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。 -
目标(Target Object)
— 是Advice被应用的对象
引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。 -
Proxy
— Spring AOP默认使用JDK的动态代理,它的代理是在运行时创建,也可以使用CGLIB代理
AOP的应用场景
- 日志(Logging):在应用程序中实现日志记录
- Authentication(身份校验):使用身份验证之前的操作(如允许一些操作只有通过身份验证的用户)。
- 数据校验(Validation or Notification):实施验证或通知属性setter(调用 propertychange事件当属性已经改变了类,实现INotifyPropertyChanged接口)。
- 行为改变(Changing the behavior):改变一些方法的行为。
网友评论