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

      几个常用的实现:

  1. DefaultPointAdvisor:是最通用的pointcutAdvisor实现,除了不能 为其制定Introduction类型的Advice,其他剩下的pointcut,advice都可以通过他来实现。
  2. NameMatchMethodPointcutAdvisor:自身限定使用的Pointcut类型为NameMatchMethodPointcut
  3. RegexpMethodPointcutAdvisor:自身限定使用Pointcut类型为正则表达式的pointcut
  4. DefaultBeanFactoryPointcutAdvisor:使用这个Advisor需要绑定到spring的IoC容器中,作用是通过容器的Advice注册的beanName来关联对应的Advice,只有当对象的pointcut匹配成功之后,才去实例化对应的advice,减少容器启动初期的Advisor和advice之间的耦合性

   IntroductionAdvisor分支:IntroductionAdvisor与pointcutAdvisor最本质上的区别就是:IntroductionAdvisor只能应用类级别的拦截。

   Order:当存在多个advisor的pointcut匹配同一个joinpoint是,多个横切逻辑作用于同个joinpoint时,可使用order对逻辑执行顺序进行排序


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM