什么是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配置实现
- 编写通知(增强类,一个普通类)
- 配置通知,将通知类交给SpringIoc容器管理
- 配置AOP切面
- 切入点表达式
- 格式。
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
- execution。必须要
- 修饰符。可省略
- 返回值类型。必须要,但是可以使用*通配符
- 包名。多级包名使用.分割;包名可用*代替;可用..省略中间的包
- 类名。可用*代替,也可用*通配符
- 方法名。可用*代替,也可用*通配符
- 参数。可用*代替,如果有多个参数,可用..代替
- 格式。
- 通知类型
- 前置通知
- 后置通知
- 最终通知
- 环绕通知
- 异常抛出通知
- 切入点表达式
springAOP整合AspectJ的注解配置实现
- 编写切面类
- 配置切面类。在配置文件中加入<component-scan>标签并指定相应的包
- 开启AOP自动代理。加入<aop:aspectj-autoproxy />标签
springAOP整合AspectJ的纯注解配置实现
- 编写切面类
- 配置切面类。在@Configuration类上加入@ComponentScan注解,并指定相应的包
- 开启AOP自动代理。在@Configuration修饰的类上加上@EnableAspectJAutoProxy注解
发表回复