这个问题我其实遇到很久了,目前解决方案是手动注入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>
这样的话,是可以正常搞定的。