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

一个不正经的程序员 发布于 2017/07/13 09:55
阅读 1K+
收藏 0

这个问题我其实遇到很久了,目前解决方案是手动注入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,求大神指点一二。

加载中
0
konooo
konooo

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

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

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

0
士别三日
士别三日

检查一下@Service的扫描范围

0
一个不正经的程序员
一个不正经的程序员

引用来自“konooo”的评论

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

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

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

我一般自动注入不加别名的,就是@Service这样使用

0
rz
rz

spring配置

0
kse-music
kse-music

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

0
一个不正经的程序员
一个不正经的程序员

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

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

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

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

0
l
liun

试试用setter方法注入

返回顶部
顶部