【发布时间】:2012-03-05 09:09:00
【问题描述】:
我有许多 Spring bean,其中一些位于共享库 jar 中。我似乎无法让@Qualifier 工作。
我将 default-autowire 设置为 "byType",这是使用 Spring 3.1.0.M2 并作为独立可执行文件运行。如果我从共享库中删除“TestTwoBean”,项目将按预期执行。
myproj-shared-lib.jar:
@Service
public class TestOneBean implements ITestBean {
}
@Service
public class TestTwoBean implements ITestBean {
}
myproj.jar:
@Service
public class TestConsumerBean {
@Autowired @Qualifier("testOneBean")
private ITestBean bean;
}
我在运行时得到 “no unique bean with name” 异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建文件 [-] 中定义的名称为“testConsumerBean”的 bean 时出错: 通过 bean 属性 'bean' 表示的不满足的依赖关系: : 否 [com.myco.ITestBean] 类型的唯一 bean 已定义:预期为单个 匹配 bean 但找到 2:[testOneBean, testTwoBean];嵌套的 例外是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 [com.myco.TestBean] 类型的唯一 bean 已定义:预期为单个 匹配 bean 但找到 2: [testOneBean, testTwoBean] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1167) ...
@Qualifier 在这种情况下不起作用吗?有已知的解决方法吗?
【问题讨论】:
-
我认为,通过修改
@Service("testOneBean") public class TestOneBean implements ITestBean { }应该可以工作
标签: spring dependency-injection classpath