关于同个类型的类,bean 的名字(name),不同的注入方式
一、 @Resource方式注入
如下面,同个类有两个不同的bean name ,类的类型一样,属性值不同时:
@Bean(name = "influx1")
public InfluxDB influxDB1(){
InfluxDB influxDB = InfluxDBFactory.connect("http://localhost:8086");
influxDB.setDatabase("db1")
.enableBatch(20,200, TimeUnit.MILLISECONDS);
return influxDB;
}
@Bean(name = "influx2")
public InfluxDB influxDB2(){
InfluxDB influxDB = InfluxDBFactory.connect("http://localhost:8086");
influxDB.setDatabase("db2")
.enableBatch(20,200, TimeUnit.MILLISECONDS);
return influxDB;
}
如果用@Resource注解,可以如下使用:
@Resource(name = "influx1")
private InfluxDB influxDB1;
@Resource(name = "influx2")
private InfluxDB influxDB2;
二、 @Autowired方式注入
背景:由于@Autowired 默认第一按照byType(类的类型),第二byName(l类名\类ID)来加载类,所以当存在类型相同,多个beanname时,想注入某个类,就必须指定根据什么beanName查找,不用@Qualifier注解指定,则会以变量名为为beanName进行查找;值得注意的是,利用注解@Qualifier(“beanName”) 指定beanName,idea会报红,不会编译报错。不指定时,@Autowired用变量名去查找,发现容易没有注册该bean,则会直接编译报错;
假设有如下两个bean,和上面用注解声明bean的效果一样;
//使用方式1:
@Autowired //(默认第一按照byType,第二byName)
private Demo x; //这样注入是报错的
//使用方式2:
@Autowired
private Demo z; 不加@Qualifier("z")注解, 以变量名 z 去查对应bean
//使用方式2:
@Autowired
@Qualifier("z")
private Demo zzz; 加了 @Qualifier("z"),以注解设置的z为beanName查找对应的bean
注:说的有点啰嗦,是因为怕有人对这个理解有些片面或者理解错了,就多唠叨几句,希望我的文章是真实对你有帮助,或者解答了你的疑惑的,而不是浪费你时间的文章;且行且珍惜。。。加油码农仔!!!