开发者社区> 问答> 正文

Spring中,使用工具类无法自动注入service?报错

这个问题我其实遇到很久了,目前解决方案是手动注入service,并且把工具类也手动注入。

场景:

在spring中,我们经常会定义工具类来做一些奇怪的事情,我当前是通过定时任务quarz调度工具类,工具类再调service,如果采用自动注入的方式,会报错:

Caused by: 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.aa.logic.service.MyService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)

很常见的错误,于是我就改成手动注入的方式,不在实现类中用@Service注解,采用在spring配置文件中手动注入bean的方式,

<bean id="myService" class="com.aa.logic.service.impl.MyServiceImpl"></bean>
	
	<bean id="autoCalcUtil" class="com.aa.logic.utils.AutoCalcUtil">
		<property name="myService" ref="myService"></property>
	</bean>

这样的话,是可以正常搞定的。

那么问题来了:我这个人强迫症犯了,这个到底是啥原因导致不能自动注入呢?实在是不想手动来写这段手动注入的代码。

其实大概原因我知道,就是spring扫描估计没配置好,导致util中无法识别service,求大神指点一二。

展开
收起
爱吃鱼的程序员 2020-06-08 12:37:09 1048 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    我遇到过两种,不过都是低级错误,不知道对楼主有没有帮助

    一是@Service中没加别名或者拼错了 @Service("testService") 这样在Quarz中再使用自动注入的时候就没再报错

    二是在第一条完成的情况下不能使用注解注入,我遇到的就是线程中注解注入无用,要使用读取配置文件的方式,获取application然后使用getBean("testService")获取

    检查一下@Service的扫描范围

    引用来自“konooo”的评论

    我遇到过两种,不过都是低级错误,不知道对楼主有没有帮助

    一是@Service中没加别名或者拼错了 @Service("testService") 这样在Quarz中再使用自动注入的时候就没再报错

    二是在第一条完成的情况下不能使用注解注入,我遇到的就是线程中注解注入无用,要使用读取配置文件的方式,获取application然后使用getBean("testService")获取

    spring配置

    <context:component-scanbase-package="com.hiekn.demo"/>扫包

    引用来自“kse-music”的评论

    <context:component-scanbase-package="com.hiekn.demo"/>扫包

    <!--注册组件启用注解-->
       <context:component-scanbase-package="com.aa"/> 
       
       <mvc:annotation-driven/>    

    这个我配置了的,直接扫的根目录,util目录都在这个下面  

    试试用setter方法注入

    2020-06-08 12:37:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多