java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected

4 篇文章 0 订阅

Java spring报错 java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected

首先感谢大佬ncepu_Chen的热情帮助,自己搞了一下午没成,结果大佬来了分分钟解决战斗。

先确定下问题的情况,在程序的正确位置加了注解之后,开始运行。

  • 首先第一点发现程序运行特别慢
  • 之后程序报错,主要错误内容就是“java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected”
  • 大佬今天来了直接给我展示了两个解决办法,之前在网上只找到一种,还说的不明不白,一堆人还准来转去,真服,这个魔幻的世界。

这里是我最开始跟着视频写的注解方式,结果就报错了。。。
在这里插入图片描述

报错原因(方便对症下药)
  1. 出现这种错误的一般都是新手,基本都不懂spring的运行原理。

  2. “@ComponentScan”注解在运行时会自动扫描默认路径下的包,当你的文件都在一个包下面时,一般不会出现问题。

  3. 但是有时候我们main函数所在的类会写在其他包的外面,这时就出现问题了。在这里插入图片描述

  4. spring进行扫描时,会以配置类(默认@Component 注解加在配置类中)所在的包为基础,扫描当前包,以及其子包。

  5. 此时我们运行程序, “@ComponentScan”就去扫描电脑中的包,上面所说的“程序运行特别慢”就是这个原因,因为需要扫描的包实在太多了。然后就可能扫到了spring自带的一些包,然后就报错。。。

  6. 要解决这个问题,我们要做的其实就是指定 “@ComponentScan”的扫描范围。

  7. 下面上解决办法

第一种解决办法,修改注解

这个时候大佬又给我科普了一下,注解其实就是一个增强的函数,注解也可以有自己的参数。

//第一种
@ComponentScan("soundsystem")
// 第二种
@ComponentScan(basePackages = "soundsystem")
// 第三种
@ComponentScan(value = "soundsystem")
// 第四种
@ComponentScan(basePackageClasses = {CDPlayer.class, CompactDisc.class})

很明显前三个注解传入的参数都是包名,而第四个传入的参数是类名。
这里我只用到了一个包,所以参数都只有一个,如果你使用到了多个包的话,将包名以字符串数组的形式传入就可以:{“package1”,“package2”…}
如果使用第四种方式的话就把所有的类名以数组的形式传入就可以。

  • 注意此时,main函数中的初始化代码应该为
ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);

第二种解决办法,写xml配置文件

在resource中新建一个spring配置文件(建过就不用再建了,直接对照代码修改就行),命名没什么要求。不过一般大家都命名为ApplicationContext.xml
在这里插入图片描述
新建好配置文件之后,将里面的默认代码替换为一下代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        <!--下面一行代码是必须要加的,而且要注意添加的位置,必须要在下面的xsi 之前 -->
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        <!--下面三行代码实测可有不添加-->
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
	<!-- 下面的 component-scan base-package="*" 将“*”修改为你所用的包
	,有多个时再后面再加一条<context:component-scan base-package="*">就可以-->
	
    <context:component-scan base-package="*"></context:component-scan>

</beans>
  • 注意此时,main函数中的初始化代码应该为
ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");
//Spring.xml 是我xml文件的名字
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值