@Autowired
1.按照类型查找,如果只有一个,就直接注入。(如果没有就直接报错)
@Component
public class BeanConfig {
@Bean //交给Spring 管理
public UserInfo userInfo(){ //这是个方法 创建对象并修改并返回对象的name
return new UserInfo("zhangsan");
}
}
@Controller("userController")
public class UserController {
@Autowired //把对象注入
private UserInfo user; //首先根据类型查找,只有一个的话,就查找成功
public void sayHi(){
System.out.println(user);
System.out.println("hi, user controller...");
}
}
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
UserController bean = context.getBean(UserController.class);
bean.sayHi();
}
}
执行结果
2. 如果查找到多个同样的类型,就根据名称查找,查找到了就注入,反之,抛异常
下面的代码是类型一样,名称不一样
@Component
public class BeanConfig {
@Bean //这是个方法 定义对象并返回对象的name
public UserInfo userInfo(){
return new UserInfo("zhangsan");
}
@Bean
public UserInfo userInfo1(){
return new UserInfo("lisi");
}
上述代码可以看到,有多个同样类型,就会根据名称查找,名称没查到就报异常
@Controller("userController")
public class UserController {
@Autowired
private UserInfo userInfo1; //多个同样类型,根据名称查找
public void sayHi(){
System.out.println(userInfo1);
System.out.println("hi, user controller...");
}
}
成功查找到
@Qualifier
使⽤@Qualifier注解:指定当前要注⼊的bean对象。在@Qualifier的value属性中,指定注⼊的bean的名称。
@Controller("userController")
public class UserController {
@Qualifier("userInfo1") //根据指定名称去查找
@Autowired
private UserInfo userInfo; //这里的名称因为有 @Qualifier 就可以随便起了
public void sayHi(){
System.out.println(userInfo);
System.out.println("hi, user controller...");
}
}
得到结果是lisi, 没加 @Qualified 之前是zhangsan
@Qualifier注解不能单独使用,必须配合@Autowired使用
@Resource
使用@Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。
@Controller("userController")
public class UserController {
@Resource(name = "UCInfo") //通过name属性指定注入
private UserInfo user;
public void sayHi(){
System.out.println(user);
System.out.println("hi, user controller...");
}
}
@Component
public class BeanConfig {
@Bean //这是个方法 定义对象并返回对象的name
public UserInfo userInfo(){
return new UserInfo("zhangsan");
}
@Bean
public UserInfo userInfo1(){
return new UserInfo("lisi");
}
@Bean
public UserInfo UCInfo(){
return new UserInfo("lisi222");
}
}
执行的是 UCInfo