厦门公司注册网站深圳网站优化公司哪家好
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:47
当前位置: 首页 > news >正文
厦门公司注册网站,深圳网站优化公司哪家好,wordpress微信登录的插件,商业合作及运营方案背景 自从学习spring起#xff0c;AOP这个词几乎是天天挂在嘴边#xff0c;好像一切都是天经地义的。 尤其在springboot里面#xff0c;经常见到的Before After等之类的内容#xff0c;一般更是没有多少解释#xff0c;通常被告知这是aop的用法。 能有人特别…背景 自从学习spring起AOP这个词几乎是天天挂在嘴边好像一切都是天经地义的。 尤其在springboot里面经常见到的Before After等之类的内容一般更是没有多少解释通常被告知这是aop的用法。 能有人特别说明一下下面这点信息就算不错的了。 Before After等这些的实现底层是 aspectj 。官网地址aspectJ官网aspectj并不天然是spring framework的一部分人家本是一个独立项目以优秀的方式实现了aop还有一些其他的aop实现如Jboss Aop什么的。spring framework有自己的aop实现但难用麻烦后来spring官方索性将 优秀的aspectj 集成到了spring framework源码中。 从此以后就成了现在我们看到的spring framework的aop似乎天然就是aspectj的样子。 但我总觉得不对劲距离透彻的理解似乎总差着一段距离。 于是今天势必追查清楚求个究竟。 引出具体问题 首先明确一个基本事实就是 aspectj并不天然是spring framework的一部分它本是一个独立项目它以自己的方式实现了aop 那么我们就不仅仅是一定要把它用在spring项目中比如我想把它用在我的一个简单的控制台项目中该怎么做呢 显然地网上的文章一大抄基本上一搜都是教你什么是 pointcut什么是 joinpoint等等然后如何用在springboot项目中。 这个太简单太程式化已经麻木了不值一提。 实现步骤 经过一些搜索、尝试起初我的项目并没有如预期一样执行输出的指定的 before after之类的内容。 经过更多的搜索和思考想明白了原理之后一切都变得水到渠成了。 其中在外网搜到一个有用的文章给了我很多启发。 How to create a Hello World with IntelliJ and Aspect J 里面的步骤也挺详细的。 正式进入实现步骤
- 安装编译器
想要正常使用aspectj将自己写好的pointcut等内容织入到对应的class文件这是一个类似于编译的过程。就像编译C语言需要gcc编译器编译java需要javac编译器一样(当然也可能是别的编译器)。我们需要下载aspectj并安装在我们的电脑中。
下载和安装步骤依次如下图
下载地址: https://www.eclipse.org/aspectj/downloads.php 截至此处已经下载并安装了 aspectj到本地。
2.配置环境变量
同样地类似我们安装了jdk到本地但cmd命令行里并不能直接使用javac xxx.java命令就是因为我们没有把javac可执行文件配置到我们的path环境变量里。 这个aspect编译器也一样同样需要配置环境变量。 如下图 我只配置了CLASSPATH并且只把C:\aspectj1.9\lib\aspectjrt.jar配置进去就最终成功了。
- 验证一下 随便试了一下ajc xxx别管它报错不报错有反应就行。说明这个ajc编译器已经配成功地配置并且可用了。 至此系统级环境配置结束。 开始设法将aspectj用在常规项目中。 IDEA里新建一个最简单的项目
- 新建一个空maven项目 2. 添加aspectj依赖 3. 随便写个mai方法 4.新增一个AspectJ文件 我猜测这里之所以能这么新增是因为我的IDEA已经安装了aspectj插件。来看一下。 应该是上图两个插件中的第一个不去验证了。
- aspectj文件里添加pointcut等内容
这个时候就可以在其他网页里随便抄一段了。如 显然这里我是试图在 main方法调用之前拦截到的。 如果能拦截到则控制台会输出绿色字的内容。 下面直接启动一下main方法看效果。 然而并没有。 不管你再怎么cleanclean installrebuild等等等等都一样不用再试了。
开始思考和解决aspectj为什么不生效
这段代码居然有了个aspectj关键字居然编译没报错已经很让我惊讶了。 难道jdk编译的时候认识它 或者是由于插件的原因使他显示为蓝色 但编译为什么没报错呢 既然没报错那为什么又不生效呢
经过网上搜索查资料和思考我悟了。 原因其实也很简单就是这段代码不应该由jdk来编译因为jdk又不知道遇到aspect该怎么办而应该由 aspectj提供的编译功能来编译也即ajc。 (但我也没弄明白为什么有aspect字jdk编译却不报错) 1. 下面开始给IDEA配置ajc编译器 给Path to aspectjtools.jar配置路径测试一下如下图。
- 此时让我们再编译一下项目 如果配置正确的话现在我们就是用ajc编译的了。
- 然后运行 立竿见影。
至此完整演示成功。 基本原理总结起来就是 安装aspectj也就有了aspectj编译器项目中配置编译器使用ajc编译器项目中新增aspect文件指定各种切点等。使用ajc编译项目生成如何预期的结果。 几行 的demo地址如下 aspectj-demo.zip 如果此文真的给你解惑了或者起到了帮助可考虑打赏。 后记补充
写完之后我以为就完了但是后来马上又发现了问题。 就是在前面引入的两个maven依赖 dependenciesdependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactIdversion1.8.7/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.8.7/version/dependency/dependencies它为什么要是两个依赖呢 我偶然地发现一个依赖也能正常执行。 更奇怪的是这两个依赖只依赖任何一个就可以正常执行了。 已经亲测2021年8月23日23点04分。
那么这里又引出了下一个问题
aspectjrt和aspectjweaver是什么关系各自有什么作用
现在来看一下 由图可知这是很明显的aspectjweaver 包含了aspectjrt全部的内容。 另外主要多出来的内容以我的经验我一眼就看出了重点以下是猜测但我感觉是对的 后者比前者多出的内容主要是 asm 和 weaver。 那么
asm是什么
ASM 是一个 Java 字节码操控框架。 它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里这些类文件拥有足够的元数据来解析类中的所有元素类名称、方法、属性以及 Java 字节码指令。ASM 从类文件中读入信息后能够改变类行为分析类信息甚至能够根据用户要求生成新类。 weaver是什么
weaver这个词就是“织入”的意思啊字面意思不解释了。
所以很明显weaver asm实现了可以动态织入 pointcut等内容到字节码中去的。
那么下一步再可以得出推论。
推论 aspectjrt 功能单纯一些应该是提供一个编译过后的已经织入了pointcut等内容的java字节码的程序的运行环境。 关键词rt也就是 runtime。这个概念我们已经比较熟悉了。 aspectjweaver 包含了aspectjrt全部内容另外多出了 动态织入的能力主要是asm weaver部分的代码。
上面的示例中之所以需要配置ajc编译器要编译之后才能正常执行正是因为推论1的原因。 而推论2 我猜测多出来的这部分能力就是让java项目可以不用再专门指定ajc编译器而是使用asm weaver可以对java代码进行动态编译和织入内容这样的话直接使用通用的javac编译器就可以了。 当然还看得出来也支持了注解的用法。 顺便多数一句这个情况我已经用代码验证了符合猜想大概是对的无疑了。 ps: spring项目应用三步曲: aspect(需要标记为Component) – pointcut – advice 看似不起眼其实ps:这句话很精髓懂的自然懂。 所以项目里想要使用aspectj注解的写法需要引入 aspectjweaver 而不是aspectjrt 比如spring里的aop相关的用法。 如果愿意自己指定ajc编译器则可只引入体积较小的aspectjrt。 我忽然觉得自己理解得更通透了。
- 上一篇: 厦门公司注册网站电商线上推广
- 下一篇: 厦门建公司网站学计算机编程需要什么基础
相关文章
-
厦门公司注册网站电商线上推广
厦门公司注册网站电商线上推广
- 技术栈
- 2026年03月21日
-
厦门公司建站网站建设费计入什么费用
厦门公司建站网站建设费计入什么费用
- 技术栈
- 2026年03月21日
-
厦门公司建站网站建设 html5
厦门公司建站网站建设 html5
- 技术栈
- 2026年03月21日
-
厦门建公司网站学计算机编程需要什么基础
厦门建公司网站学计算机编程需要什么基础
- 技术栈
- 2026年03月21日
-
厦门建设服务管理中心网站互联网信息投资平台
厦门建设服务管理中心网站互联网信息投资平台
- 技术栈
- 2026年03月21日
-
厦门景观绿环建设行业协会网站wordpress昨英文
厦门景观绿环建设行业协会网站wordpress昨英文
- 技术栈
- 2026年03月21日






