在Spring 4中扫描@Configuration bean

时间:2015-12-03 17:15:21

标签: java spring autowired

Hy

我正在将我的网络应用程序从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后,我收到此错误:

  

引起:   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   找到[w.wexpense.service.StorableService]类型的限定bean   依赖:预计至少有1个bean有资格成为autowire   这种依赖的候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真),   @ org.springframework.beans.factory.annotation.Qualifier(值= templateService)}

有人知道吗?

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

由于

1 个答案:

答案 0 :(得分:2)

Spring 4 autowire bean使用Java泛型作为@Qualifier的形式。

所以你有@Autowired的{​​{1}} Bean,但StorableService<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); } 注释的

autowire

@Qualifier

Spring 4将完美地注入它。请查看此博客post以查看Spring 4的这一新功能。