这个问题我其实遇到很久了,目前解决方案是手动注入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,求大神指点一二。
我遇到过两种,不过都是低级错误,不知道对楼主有没有帮助
一是@Service中没加别名或者拼错了 @Service("testService") 这样在Quarz中再使用自动注入的时候就没再报错
二是在第一条完成的情况下不能使用注解注入,我遇到的就是线程中注解注入无用,要使用读取配置文件的方式,获取application然后使用getBean("testService")获取
检查一下@Service的扫描范围
我遇到过两种,不过都是低级错误,不知道对楼主有没有帮助
一是@Service中没加别名或者拼错了 @Service("testService") 这样在Quarz中再使用自动注入的时候就没再报错
二是在第一条完成的情况下不能使用注解注入,我遇到的就是线程中注解注入无用,要使用读取配置文件的方式,获取application然后使用getBean("testService")获取
spring配置
<context:component-scanbase-package="com.hiekn.demo"/>扫包
<context:component-scanbase-package="com.hiekn.demo"/>扫包
<!--注册组件启用注解-->
<context:component-scanbase-package="com.aa"/>
<mvc:annotation-driven/>
这个我配置了的,直接扫的根目录,util目录都在这个下面
试试用setter方法注入
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。