如果只有一个String-type bean,你可以不做任何改变。可以按类型注入。
@Configuration
public class Config {
private final String p = "Prop";
@Bean
public String getP() {
return p;
}
}
@Component
public class SomeC {
private String p;
public SomeC(String p) {
this.p = p;
}
}
如果有多个String-type bean,可以按名称注入。
@Configuration
public class Config {
private final String p = "Prop";
private final String q = "AnotherProp";
@Bean
public String getP() {
return p;
}
@Bean
public String getQ() {
return q;
}
}
@Component
public class SomeC {
@Resource(name = "getP")
private String p;
默认 bean 名称是方法名称 getP。
可以通过@Bean("customName")注解重命名。
注意:
如果您打算通过名称来表达注解驱动的注入,请不要主要使用@Autowired (snip)。而是使用 JSR-250 @Resource 注释
@Resource 仅支持具有单个参数的字段和 bean 属性设置器方法。
限定符注入可用于构造函数注入。
@Configuration
public class Config {
private final String p = "Prop";
private final String q = "AnotherProp";
@Bean
@Qualifier("p")
public String getP() {
return p;
}
@Bean
@Qualifier("q")
public String getQ() {
return q;
}
}
@Component
public class SomeC {
private String p;
public SomeC(@Qualifier("p") String p) {
this.p = p;
}
}
This answer 是一种后备行为。名称和限定符是不同的。
对于后备匹配,bean 名称被视为默认限定符值。