@Autowired执行流程

@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

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值