[ Spring 3.0.5] [jboss 5.1]
我有几个标记为 @Service
的类,它们实现了相同的接口(interface)。
例如,
@Service(value="test1")
public TestImpl1 implements Test {}
@Service(value="test2")
public TestImpl2 implements Test {}
接下来,我有如下结构
public SomeClass {
@Autowired
@Qualifier("test1")
Test test1;
@Autowired
@Qualifier("test2")
Test test2;
我遇到异常(在部署时)
10:36:58,277 ERROR [[/test-web]] Servlet /test-web threw load()
exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
unique bean of type [pl.tests] is defined: expected single matching
bean but found 2: [test1, test2]
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.doReso lveDependency(DefaultListableBeanFactory.java:
796)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolv eDependency(DefaultListableBeanFactory.java:
703)
at
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostPro cessor
$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:
474)
有人知道怎么解决吗?
T.
最佳答案
几个选项:
- 使用
@Resource(name="test1")
在注入(inject)点 - 可以使用
javax.inject.Qualifer
机制。简而言之 - 您定义一个注释 (@Test
) 并使用@Qualifier
注释该注释.然后使用@Autowired @Test
在注入(inject)点上。 - 在目标 bean 上显式设置限定符。文档说只显示 xml 版本
<qualifier />
, 但尝试添加@Qualifier("test1")
关于服务定义
关于@Service 和@Autowired 注释的 Java/Spring 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968680/