spice and wolfspice and wolf Be the One you wanna Be

springAOP

什么是AOP?

面向切面编程(Aspect Oriented Programming)。在不修改目标类代码的情况下,可以通过AOP增加目标类功能。将业务代码和系统代码进行隔离,降低系统的耦合度。

AOP术语

  • Joinpoint(连接点)
  • PointCut(切入点)
  • Advice(通知/增强)
  • Introduction(引入)
  • Weaving(织入)。将Advice应用到aspect切面的过程称为织入,织入又分为动态织入和静态织入。动态织入通过预编译方式运行时动态代理实现;静态织入通过在编译期将aspect类源码的class文件和java类源码的class文件进行整合生成新的class文件,并将新生成的class文件替换java类源码class文件实现。
  • Proxy(代理)
  • Aspect(切面)
  • Advisor(通知器/顾问)

AspectJAOP

  • AspectJ是java实现的AOP框架
  • 采用静态织入

SpringAOP

  • 采用动态织入。通过基于反射的动态代理实现
  • 通知类型
    • 前置通知
    • 后置通知
    • 环绕通知
    • 异常通知

springAOP整合AspectJ的xml配置实现

  1. 编写通知(增强类,一个普通类)
  2. 配置通知,将通知类交给SpringIoc容器管理
  3. 配置AOP切面
    • 切入点表达式
      • 格式。execution([修饰符] 返回值类型 包名.类名.方法名(参数))
        • execution。必须要
        • 修饰符。可省略
        • 返回值类型。必须要,但是可以使用*通配符
        • 包名。多级包名使用.分割;包名可用*代替;可用..省略中间的包
        • 类名。可用*代替,也可用*通配符
        • 方法名。可用*代替,也可用*通配符
        • 参数。可用*代替,如果有多个参数,可用..代替
    • 通知类型
      • 前置通知
      • 后置通知
      • 最终通知
      • 环绕通知
      • 异常抛出通知

springAOP整合AspectJ的注解配置实现

  1. 编写切面类
  2. 配置切面类。在配置文件中加入<component-scan>标签并指定相应的包
  3. 开启AOP自动代理。加入<aop:aspectj-autoproxy />标签

springAOP整合AspectJ的纯注解配置实现

  1. 编写切面类
  2. 配置切面类。在@Configuration类上加入@ComponentScan注解,并指定相应的包
  3. 开启AOP自动代理。在@Configuration修饰的类上加上@EnableAspectJAutoProxy注解

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Press ESC to close