我有下一个结构:
@Component public abstract class
HuginJob extends QuartzJobBean {...}
@Component("CisxJob") public class
CisxJob extends HuginJob {...}现在我想测试CisxJob:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext-test.xml" })
public class CisxJobTest {
@Autowired
@Qualifier("CisxJob")
private CisxJob cisxJob;
..... }这里是applicationContext-test.xml的一部分
<context:annotation-config />
<context:component-scan base-package="no.hugin.jobscheduler" />错误是
创建名为‘no.hugin.jobtest’的bean时出错,名称为‘no.hugin.jobtest’:注入自动依赖项失败;嵌套的异常是rg.springframework.beans.factory.BeanCreationException:无法自动更新字段:私有no.hugin.jobscheduler.job.cisx.CisxJob no.hugin.jobscheduler.job.cisx.CisxJobTest.cisxJob;嵌套的例外是org.springframework.beans.factory.NoSuchBeanDefinitionException:,不匹配类型为no.hugin.jobscheduler.job.cisx.CisxJob类型的bean :期望至少有一个bean,它可以作为此依赖项的自动选择。依赖性注释:{@org.springframework.beans.factory.annotation.Autowired(required=true),@org.springframework.beans.factory.annotation.Qualifier(value=CisxJob)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) .
问题在于QuartzJobBean的扩展--但我需要它。
谢谢
发布于 2011-04-19 11:26:48
问题在于Spring生成AOP代理的方式。当类被代理实现任何接口时,Spring默认创建一个JDK代理来实现这些接口。
由于QuartzJobBean实现了接口Job,所以CisxJob被代理为Job,并且该代理不能自动分配到CisxJob类型的字段中。
有两种解决办法:
公共接口CisxJob {.} @Component(" CisxJob ")公共类CisxJobImpl扩展HuginJob实现CisxJob{.}
还请参见:
https://stackoverflow.com/questions/5715117
复制相似问题