首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展非容器类的Autowire类。

扩展非容器类的Autowire类。
EN

Stack Overflow用户
提问于 2011-04-19 10:40:21
回答 1查看 4.7K关注 0票数 2

我有下一个结构:

代码语言:javascript
复制
@Component public abstract class
HuginJob extends QuartzJobBean {...}


@Component("CisxJob") public class
CisxJob extends HuginJob {...}

现在我想测试CisxJob:

代码语言:javascript
复制
 @RunWith(SpringJUnit4ClassRunner.class)

 @ContextConfiguration({"/applicationContext-test.xml" })

public class CisxJobTest {

     @Autowired
     @Qualifier("CisxJob")
     private CisxJob          cisxJob;
..... }

这里是applicationContext-test.xml的一部分

代码语言:javascript
复制
<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的扩展--但我需要它。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-19 11:26:48

问题在于Spring生成AOP代理的方式。当类被代理实现任何接口时,Spring默认创建一个JDK代理来实现这些接口。

由于QuartzJobBean实现了接口Job,所以CisxJob被代理为Job,并且该代理不能自动分配到CisxJob类型的字段中。

有两种解决办法:

  • 如果您的bean实现了任何接口,也可以为其业务方法创建一个接口,并将其用作字段类型:

公共接口CisxJob {.} @Component(" CisxJob ")公共类CisxJobImpl扩展HuginJob实现CisxJob{.}

  • 使用代理-目标类模式:

还请参见:

  • 7.6 Proxying mechanisms
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5715117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档