我有三个jar
和一个war
。 A
,B
,C
和D(war)
,A
和B
取决于C
,D
取决于A
和B
。
X
中有一个接口C
。
Y
中有X
的实现类A
和Y
中X
的实现类B
bean
中的Spring
名。
喜欢这个:
package com.example.a
class Y implements X
package com.example.b
class Y implements X
我的问题:
在D
中,我想使用Spring
同时获得两个beans
。怎么做?
在“ C”中:
package com.example.c
public interface X {
String getPath();
}
在“ A”中:
package com.example.a
@Component
public class Y implements X {
public String getPath(){
return "/User/name/application";
}
}
在“ B”中:
package com.example.b
@Component
public class Y implements X {
public String getPath(){
return "/usr/local/bin";
}
}
在“ D”中:
package com.example.d
public class Application{
@Autowired
private List<? extends X> xes;
public static void main(String[] args){
for(X x : xes){
System.out.println(x.getPath());
}
}
}
当A
和B
具有完全相同的Y名称时,您会怎么做?
答案 0 :(得分:3)
尽管两个bean的类型(接口)都相同,但是您可以给它们两个不同的名称:
@Bean
public X beanYInPackageA(){
return new com.example.a.Y();
}
@Bean
public X beanYInPackageB(){
return new com.example.b.Y();
}
并使用@Qualifier
通过@Autowired
顶部的bean名称(按名称进行连接)进一步定义注入哪些bean:
@Autowired
@Qualifier("beanYInPackageA")
private X beanYInPackageA;
@Autowired
@Qualifier("beanYInPackageB")
private X beanYInPackageB;
答案 1 :(得分:0)