java - 在 Spring 4 中扫描@Configuration bean

标签 java spring autowired

我正在将我的网络应用程序从 Spring 3.1 升级到 4.1.8,但遇到问题。我的代码没有改变(只有我的pom.xml)

我的主上下文中有一个配置 bean,如下所示:

@Configuration
public class StorableServiceConfiguration {
    ...
    @Bean 
    public StorableService<Template, Long> templateService(ITemplateJpaDao dao) {
        return new DaoService<Template, Long>(Template.class, dao);
    }
}

显然在我的网络应用程序的其他地方,我有这样的声明:

@Autowired
@Qualifier("templateService")
private StorableService<Template, String> templateService;

现在,这一切在 Spring 3.1.1 上运行良好,但在将版本更新到 4.1.8 后,我收到此错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [w.wexpense.service.StorableService] 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=templateService)}

有人有线索吗?

我在某处读到,Spring 4 中关于上下文:组件扫描关于 @Configuration 注释的行为方式发生了变化,但不记得是什么了。有人知道吗?

谢谢

最佳答案

Spring 4 autowire beans 使用 Java 泛型作为 @Qualifier 的形式.

所以你有一个 Bean @AutowiredStorableService<Template, String>但在你的@Configuration给你上个课 @Bean声明StorableService<Template, Long> .

如果你想要 StorableService<Template, String>例如,您应该创建另一个 @Bean在您的@Configuration类,例如:

@Bean 
public StorableService<Template, String> templateService(ITemplateJpaDao dao) {
    return new DaoService<Template, String>(Template.class, dao);
}

Autowiring 它没有 @Qualifier注释:

@Autowired
private StorableService<Template, String> templateService;

Spring 4 将完美地注入(inject)它。看看这个博客post来看看 Spring 4 的这个新特性。

关于java - 在 Spring 4 中扫描@Configuration bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072203/

相关文章:

java - 我可以 Autowiring 适配器类吗?

java - 如何 Autowiring 手动创建的对象的属性?

java - 如何将 Swing 事件从内部组件传播到容器?

java - 是否可以使用 CommConnection 下载和上传记录库和图像?

java - 无法实例化类型

java - Spring @autowired 不起作用

Java:检查路径是否是文件的父级

java - 无法让 Autowired 工作或进行组件扫描

java - 如何在 Spring Boot 中更改允许的 header

spring - 如何使用 DelegatingSecurityContextScheduledExecutorService 和 Spring 来配置优雅关闭