gpt4 book ai didi

spring - 扩展非容器类的 Autowiring 类

转载 作者:行者123 更新时间:2023-12-03 22:27:54 25 4
gpt4 key购买 nike

我有下一个结构:

@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" />

错误是

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'no.hugin.jobscheduler.job.cisx.CisxJobTest': Injection of autowired dependencies failed; nested exception is rg.springframework.beans.factory.BeanCreationException: Could not autowire field: private no.hugin.jobscheduler.job.cisx.CisxJob no.hugin.jobscheduler.job.cisx.CisxJobTest.cisxJob; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [no.hugin.jobscheduler.job.cisx.CisxJob] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@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 的扩展 - 但我需要它。

谢谢

最佳答案

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

由于 QuartzJobBean 实现了接口(interface) Job,因此 CisxJob 被代理为 Job,并且该代理不能 Autowiring 到 CisxJob 类型的字段。

有两种解决方案:

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

     public interface CisxJob { ... }

    @Component("CisxJob")
    public class CisxJobImpl extends HuginJob implements CisxJob {...}
  • 使用代理目标类模式:

     <aop:aspectj-autoproxy proxy-target-class = "true" />

另请参阅:

关于spring - 扩展非容器类的 Autowiring 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com