Spring Framework源码使用 spring-aspects AOP遇到的问题

在编译好的Spring Framework使用Aspects AOP

继续上一篇,编译Spring Framework5.1源码文章。现在要使用Aspects AOP也可能会遇到一些问题,现在这篇文章带你们解决这个问题。


1.导入AOP

我们先看看导入spring-aspects 这个包,然后在一个配置类打上@EnableAspectJAutoProxy这个注解会出现什么样的错误。
导入spring-aspects 包
@EnableAspectJAutoProxy注解
配置切面
我们在配置一个AOP切面类,在类里面声明一个切入点,声明前置通知、后置通知、环绕通知。然后开始启动spring,
会出现以下错误。
1.程序包org.springframework.cache.jcache.config不存在
2.Error:(38, 49) java: 找不到符号 符号: 类 AbstractJCacheConfiguration
3.Error:(42, 16) java: 找不到符号 符号: 类 JCacheCacheAspect
4.位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration Error:(43, 17) java: 找不到符号

出现错误!
aspect关键字

解决办法: 因为Idea默认使用的是Javac编译器,而aspect关键字它不认识,所以我们就需要下载AspectJ编译器Ajc了。

2.下载AspectJ编译器

去AspectJ官网下载AspectJ编译器,下载aspectj1.9.5的。

链接地址: https://www.eclipse.org/aspectj/downloads.php

AspectJ官网
下载好了之后就是一个jar包,在jar包的位置右键菜单打开cmd控制台。

aspectj1.9.5.jar
运行 (java -jar aspectj-1.9.5.jar) 命令安装ajc编译器。

安装ajc编译器
弹出安装窗口,点击下一步。然后选择JDK安装的目录,点击下一步,选择把编译器安装到哪一个文件夹。这里我选择安装到和aspectj-1.9.5.jar同一级目录下面,点击下一步,安装完成。

弹出安装命令
JDK安装位置
安装的位置
安装完成

3.设置IDEA编译器

打开Idea

idea设置
先安装Aspectj插件,并启用此插件。

编译擦件
将Idea编译器设置为ajc,然后设置AspectJ安装目录下的lib文件夹中的aspectjtools.jar文件,再勾选Delegate to Javac选项。

设置编译器
spring-aop_mainspring-aspectjs_main 两个模块添加 AspectJ Facets,打开:File–Project Structure–Modules

打开设置
添加Aspectj
添加Aspectj
添加Aspectj
添加完后项目结构是这样的,然后点击完成。

项目结构
把项目重新build project,然后在运行自己项目的main方法,AOP测试在控制台打印出来了。到此为止在源码中可以使用aspectj aop了。

Build Project
AOP编译成功
到此为止我们就可以阅读spring aop 的源码了,这里已经把AOP的后置处理器添加进来了。

AOP后置处理器

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在搭建spring项目时通常需要这些jar包 commons-logging-1.1.3.jar spring-aop-4.0.6.RELEASE.jar spring-beans-4.0.6.RELEASE.jar spring-context-4.0.6.RELEASE.jar spring-core-4.0.6.RELEASE.jar spring-expression-4.0.6.RELEASE.jar 在使用spring额外功能时 1 需要在xml文件中加入命名空间 可以在spring-framework-4.0.6.RELEASE\docs\spring-framework-reference\html 中搜索关键字查找配置 2 加入需要的jar包(依赖包) 由于没有引入 spring-aop-4.0.6.RELEASE.jar 引起的错误 org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop] Offending resource: class path resource [beans.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70) 由于缺少依赖包 aspectjweaver-1.6.12.jar http://search.maven.org/remotecontent?filepath=org/aspectj/aspectjweaver/1.6.12/aspectjweaver-1.6.12.jar org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around 由于缺少依赖包 aopalliance-1.0.jar org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值