1. SpringAOP面向切面编程

  1. SpringAOP个Aspect4J的关系
  2. Spring框架如何实现AOP的,代理技术?静态代理,动态代理
  3. https://pdai.tech/md/spring/spring-x-framework-aop.html

1.1. AOP概述

面向切面,更加解耦,将分散再各个业务模块重复的代码提取横向切割出来

1.2. AspectJ是什么

java实现的AOP框架,能够对java代码进行AOP编译,是目前实现AOP框架中最成熟,功能最丰富的框架。 AspectJ应用到java代码的过程(这个过程称为织入),对于织入这个概念,可以简单理解为aspect(切面)应用到目标函数( 类)的过程。

  1. 动态织入的方式是在运行时动态将要增强的代码织入到目标类中,这样往往是通过动态代理技术完成的,如Java JDK的动态代理(Proxy,底层通过反射实现)或者CGLIB的动态代理(底层通过继承实现),Spring AOP采用的就是基于运行时增强的代理技术
  2. ApectJ采用的就是静态织入的方式。ApectJ主要采用的是编译期织入,在这个期间使用AspectJ的acj编译器(类似javac) 把aspect类编译成class字节码后,在java目标类编译时织入,即先编译aspect类再编译目标类。
SpringAOP AspectJ
在纯 Java 中实现 使用 Java 编程语言的扩展实现
不需要单独的编译过程 除非设置 LTW,否则需要 AspectJ 编译器 (ajc)
只能使用运行时织入 运行时织入不可用。支持编译时、编译后和加载时织入
功能不强-仅支持方法级编织 更强大 - 可以编织字段、方法、构造函数、静态初始值设定项、最终类/方法等.
只能在由 Spring 容器管理的 bean 上实现 可以在所有域对象上实现
仅支持方法执行切入点 支持所有切入点
代理是由目标对象创建的, 并且切面应用在这些代理上 在执行应用程序之前 (在运行时) 前, 各方面直接在代码中进行织入
比 AspectJ 慢 更好的性能
Copyright & copy lviter@163.com            updated 2024-02-06 09:54:56

results matching ""

    No results matching ""