解决问题过程: (《Spring 源码深度解析》中介绍的解决过程和下面的有一点不同,不过最终都是导入jar包
spring-objenesis-repack 和 spring-cglib-repack)
百度云盘链接: https://pan.baidu.com/s/1YVcXmZnKKYisgRk3yZ8tFA 提取码:q561
这是因为spring在构建中,为了防止冲突,没有引入这两个包,需要自己引入,多数模块都有依赖到这两个包,
如 core (main和test 文件夹中都有):
但是又报了新的错误: 找不到符号: 类 AnnotationBeanConfigurerAspect ,JCacheCacheAspect ,AnnotationAsyncExecutionAspect ,AnnotationCacheAspect ,AnnotationTransactionAspect ,具体如下:
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-aspects\
src\
main\
java\
org\
springframework\
context\
annotation\
aspectj\
SpringConfiguredConfiguration
.java
-
Error
:(19, 49)
java: 找不到符号
-
符号: 类
AnnotationBeanConfigurerAspect
-
位置: 程序包
org
.springframework
.beans
.factory
.aspectj
-
Error
:(47, 16)
java: 找不到符号
-
符号: 类
AnnotationBeanConfigurerAspect
-
位置: 类
org
.springframework
.context
.annotation
.aspectj
.SpringConfiguredConfiguration
-
Error
:(48, 24)
java: 找不到符号
-
符号: 变量
AnnotationBeanConfigurerAspect
-
位置: 类
org
.springframework
.context
.annotation
.aspectj
.SpringConfiguredConfiguration
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-aspects\
src\
main\
java\
org\
springframework\
cache\
aspectj\
AspectJJCacheConfiguration
.java
-
Error
:(42, 16)
java: 找不到符号
-
符号: 类
JCacheCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJJCacheConfiguration
-
Error
:(43, 17)
java: 找不到符号
-
符号: 类
JCacheCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJJCacheConfiguration
-
Error
:(43, 49)
java: 找不到符号
-
符号: 变量
JCacheCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJJCacheConfiguration
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-aspects\
src\
main\
java\
org\
springframework\
scheduling\
aspectj\
AspectJAsyncConfiguration
.java
-
Error
:(43, 16)
java: 找不到符号
-
符号: 类
AnnotationAsyncExecutionAspect
-
位置: 类
org
.springframework
.scheduling
.aspectj
.AspectJAsyncConfiguration
-
Error
:(44, 17)
java: 找不到符号
-
符号: 类
AnnotationAsyncExecutionAspect
-
位置: 类
org
.springframework
.scheduling
.aspectj
.AspectJAsyncConfiguration
-
Error
:(44, 62)
java: 找不到符号
-
符号: 变量
AnnotationAsyncExecutionAspect
-
位置: 类
org
.springframework
.scheduling
.aspectj
.AspectJAsyncConfiguration
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-aspects\
src\
main\
java\
org\
springframework\
cache\
aspectj\
AspectJCachingConfiguration
.java
-
Error
:(42, 16)
java: 找不到符号
-
符号: 类
AnnotationCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJCachingConfiguration
-
Error
:(43, 17)
java: 找不到符号
-
符号: 类
AnnotationCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJCachingConfiguration
-
Error
:(43, 53)
java: 找不到符号
-
符号: 变量
AnnotationCacheAspect
-
位置: 类
org
.springframework
.cache
.aspectj
.AspectJCachingConfiguration
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-aspects\
src\
main\
java\
org\
springframework\
transaction\
aspectj\
AspectJTransactionManagementConfiguration
.java
-
Error
:(42, 16)
java: 找不到符号
-
符号: 类
AnnotationTransactionAspect
-
位置: 类
org
.springframework
.transaction
.aspectj
.AspectJTransactionManagementConfiguration
-
Error
:(43, 17)
java: 找不到符号
-
符号: 类
AnnotationTransactionAspect
-
位置: 类
org
.springframework
.transaction
.aspectj
.AspectJTransactionManagementConfiguration
-
Error
:(43, 56)
java: 找不到符号
-
符号: 变量
AnnotationTransactionAspect
-
位置: 类
org
.springframework
.transaction
.aspectj
.AspectJTransactionManagementConfiguration
问题原因是spring源码的AOP使用了aspectJ ,而java不识别aspectJ
解决过程:
下载AspectJ
https://www.eclipse.org/aspectj/downloads.php
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录)
安装第二部,要选择自己的jdk目录,如果jdk是安装板的,这里会自动选择,如果不是安装板的,需要手动选择一下。
选择aspectj安装目录
选择install。
File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,(注意:如果发现idea的Facets点击后,右侧区域没反应,将项目删除,重新解压->导入idea即可)具体过程如下
最终的样子:
同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性
-
D:\
workspace\
spring-framework-5
.1
.x\
spring-oxm\
src\
test\
java\
org\
springframework\
oxm\
jaxb\
Jaxb2UnmarshallerTests
.java
-
Error
:(36, 41)
java: 程序包
org
.springframework
.oxm
.jaxb
.test不存在
-
Error
:(37, 41)
java: 程序包
org
.springframework
.oxm
.jaxb
.test不存在
-
Error
:(65, 17)
java: 找不到符号
-
符号: 类
Flights
-
位置: 类
org
.springframework
.oxm
.jaxb
.Jaxb2UnmarshallerTests
-
Error
:(65, 36)
java: 找不到符号
-
符号: 类
Flights
-
位置: 类
org
.springframework
.oxm
.jaxb
.Jaxb2UnmarshallerTests
-
Error
:(73, 17)
java: 找不到符号
-
符号: 类
FlightType
-
位置: 类
org
.springframework
.oxm
.jaxb
.Jaxb2UnmarshallerTests
依次执行当前模块下的两个命令,最后clean,build 该模块即可
这个问题比较厉害,暴力解决
发现这几个错误,主要在test文件夹中,并不影响我们阅读Spring源码。简单起见,直接将相关测试代码注释掉。。
到此 spring 源码下载安装结束,可以开始源码学习了!