spring AoP学习 -----AoP的相关概念实体 Advice / Aspect
spring中的Advice按照其自身实例(instance)能否自目标对象类的所有实例中共享这一标准,可以划分成为两大类:
1.pre-class:该类型的Advice的实例可以再目标对象类的说有实例之间共享,这些Advice不会保存类状态和信息,这类Advice有:
1.before Advice: 只需要实现 aop.MethodBeforeAdvice接口。
2.ThrowsAdvice:以接口定义aop.ThrowsAdvice对应通常Aop概念中的After Throwing Advice
3.After Returning Advice
4.Around Advice
2.per-instance类型的Advice只有一种,就是 Introduction,可以在不改动目标类定义的情况下,为目标类添加新的属性和行为。
spring AoP中的Aspect:Advisor代表spring中的Aspect,但是与正常的Aspect不同,advice通常只持有一个Pointcut和一个Advice.Advisor有两种实现体系,可简单的分为两个分支aop.PointcutAdvisor.IntroductionAdvisor.
PointcutAdvisor是真正定义的一个Pointcut和Advice
几个常用的实现:
- DefaultPointAdvisor:是最通用的pointcutAdvisor实现,除了不能 为其制定Introduction类型的Advice,其他剩下的pointcut,advice都可以通过他来实现。
- NameMatchMethodPointcutAdvisor:自身限定使用的Pointcut类型为NameMatchMethodPointcut
- RegexpMethodPointcutAdvisor:自身限定使用Pointcut类型为正则表达式的pointcut
- DefaultBeanFactoryPointcutAdvisor:使用这个Advisor需要绑定到spring的IoC容器中,作用是通过容器的Advice注册的beanName来关联对应的Advice,只有当对象的pointcut匹配成功之后,才去实例化对应的advice,减少容器启动初期的Advisor和advice之间的耦合性
IntroductionAdvisor分支:IntroductionAdvisor与pointcutAdvisor最本质上的区别就是:IntroductionAdvisor只能应用类级别的拦截。
Order:当存在多个advisor的pointcut匹配同一个joinpoint是,多个横切逻辑作用于同个joinpoint时,可使用order对逻辑执行顺序进行排序