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注释的行为,但不记得是什么。有人知道吗?
由于
答案 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的这一新功能。