@Autowired属于spring的
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
public class Sp{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Sp{" +
"name='" + name + '\'' +
'}';
}
}
我们在容器中注入2个sp
//扫描包使得@service@controller@cmpoment注解生效
@ComponentScan("com.dmg")
@Configuration
public class TestConfig {
@Bean
public Sp sp(){
Sp sp=new Sp();
sp.setName("11111");
return sp;
}
@Bean
public Sp sp2(){
Sp sp=new Sp();
sp.setName("222");
return sp;
}
}
在service这里使用@Autowired自动装配
@Service
public class Linux {
@Autowired
private Sp sp;
@Override
public String toString() {
return sp.toString();
}
}
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(TestConfig.class);
Linux bean = applicationContext.getBean(Linux.class);
System.out.println(bean);
}
}
可以看到打印的是111,为什么呢?
因为@Autowired默认按照类型去查找,如果存在多个bean
那么按照名称去查询,所以找到的就是111
我们在linux这个类把sp改成sp2
这个时候打印的就是222了
我们还可以使用@Qualifier这个注解强制使用某一个bean
我们设置为sp,可以看到即使是sp2的名称,也打印了sp
我们吧@Qualifier注解去掉
这次使用@Primary注解表示唯一的使用那个bean