Discuss / Java / 关于报错@EnableAsync annotation metadata was not injected

关于报错@EnableAsync annotation metadata was not injected

Topic source

我自己实验的时候一直报错“@EnableAsync annotation metadata was not injected”,查了很久都说是@ComponentScan扫描范围的问题,最后加上了一个范围

@ComponentScan(value = “Service”),这个Service是我自己程序的一个包

具体原理我也不是太清楚,如果有人遇到相同问题可以试试。我怀疑是我之前实验的时候下载到maven本地库中的spring包被扫描到了??

也希望廖老师能指导一下。

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

你注意这一句:特别注意包的层次结构

不按规范组织包,扫描要么扫不到,要么扫太多

明白了,谢谢老师

所以我是不是可以这么理解,spring-ioc-annoconfig/src/main/java这个目录下实际上有很多隐藏文件,只不过我们在项目中看不到

廖雪峰

#5 Created at ... [Delete] [Delete and Lock User]

当然不是了,maven项目没有任何隐藏文件,是你的包结构有问题

那老师您教程里“AppConfig还标注了@ComponentScan,它告诉容器,自动搜索当前类所在的包以及子包”说@ComponentScan 的扫描范围是当前类所在的包及其子包,我不太能理解为什么会出现扫描扫到太多的问题。

我最开始是在spring-ioc-annoconfig/src/main/java目录下直接放置了AppConfig.java和service包,在AppConfig里使用了@Component,扫描到的不应该只有service包里面的文件(User、UserService、MailService)吗。

说错了,在AppConfig里面使用了@ComponentScan

请问楼上的花火同学你找到答案了吗?我跟你的错误一样一样的,加了Value = “Service”就好了

我依然没有明白这个包的结构有啥问题。。。

我 明白我的问题了。

我用intellj的maven的模板建了一个新项目,把appconfig。java这个放到了根目录(java底下),这样就需要指定scan的范围,或者是加basepackages这个来编译通过。

我加了一层新的package就不需要这么做了。

廖雪峰

#10 Created at ... [Delete] [Delete and Lock User]

你的AppConfig放abc.xyz:扫描abc.xyz以及子包

你的AppConfig放默认包:相当于根,扫描所有包,范围肯定不对


  • 1
  • 2

Reply