• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
斑駁_光影
                              Keep Hunger     Keep Foolish
博客园    首页    新随笔    联系   管理    订阅  订阅

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对逻辑执行顺序进行排序

posted @ 2012-07-24 17:58  斑驳_光影  阅读(3582)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3