假设我有这样的接口:
interface Country {}
class USA implements Country {}
class UK implements Country ()
下面是配置xml的这段代码:
<bean class="USA"/>
<bean id="country" class="UK"/>
<bean id="main" class="Main"/>
我如何控制下面哪个依赖项是自动连接的?我想要英国的那个。
class Main {
private Country country;
@Autowired
public void setCountry(Country country) {
this.country = country;
}
}
我使用的是Spring3.0.3.RELEASE。
发布于 2010-12-15 16:13:04
您可以使用@限定符注释
来自here
使用限定符微调基于注释的自动装配
由于按类型自动装配可能会导致多个候选对象,因此通常有必要对选择过程进行更多控制。实现这一点的一种方法是使用Spring的@Qualifier注释。这允许将限定符值与特定参数相关联,缩小类型匹配集,以便为每个参数选择特定的bean。在最简单的情况下,这可以是一个简单的描述性值:
class Main {
private Country country;
@Autowired
@Qualifier("country")
public void setCountry(Country country) {
this.country = country;
}
}
这将使用UK,将一个id添加到USA bean中,如果您想使用USA,则使用该bean。
发布于 2014-08-13 05:24:52
实现相同结果的另一种方法是使用@Value注释:
public class Main {
private Country country;
@Autowired
public void setCountry(@Value("#{country}") Country country) {
this.country = country;
}
}
在本例中,"#{country}
字符串是一个Spring Expression Language (SpEL)表达式,它的计算结果是名为country
的bean。
发布于 2016-09-07 20:53:14
在某些情况下,您可以使用注释@Primary。
@Primary
class USA implements Country {}
这样,它将被选为默认的自动挂载候选,而不需要在其他bean上自动挂载。
对于mo,请查看Autowiring two beans implementing same interface - how to set default bean to autowire?
https://stackoverflow.com/questions/4447877
复制相似问题