Spring用于创建对象的注解@Autowired@Qualifier @Resource 以及@Autowired多个匹配选择的分析

用于注入数据的注解

@Autowired注解

  用于注入数据的
  他们的作用就和在XML配置文件中bean标签中写一个<property>标签的作用是一样的
  @Autowired:
  作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
       如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
       如果有多个匹配:
           先通过数据类型IAccountDao圈定出来匹配的几个对象
           再通过变量名称作为bean的id accountDao查找和他一样的
           都不一样就报错
   出现位置:
   		可以使变量上,也可以是方法上
   细节:
       在使用注解注入时,set方法就不是必须的了。
       @Qualifier:
      作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以
      属性:
          value:用于指定bean的id
  @Resource
      作用:直接按照bean的id注入。它可以独立使用
      属性:
          name:用于指定bean的id
  以上三个注解都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现
  另外,集合类型的注入只能通过XML来实现

看个示例
在这里插入图片描述

此时accountDao为null会报空指针异常
在这里插入图片描述
我们这时候就可以用@Autowired
在这里插入图片描述
就可以顺利执行

@Autowired多个匹配的选择

如果有多个匹配:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时就不知道选择谁了会报错
在这里插入图片描述
先通过数据类型IAccountDao圈定出来匹配的几个对象
再通过变量名称作为bean的id accountDao查找和他一样的
都不一样就报错
在这里插入图片描述

用于指定类型注入 @Qualifier:

作用:在按照类中注入的基础之上再按照名称注入。
	  它在给类成员注入时不能单独使用。但是在给方法参数注入时可以
属性:
    value:用于指定bean的id

在这里插入图片描述

觉得写两个注解麻烦还有这个注解

@Resource

注意Resource是jdk自带的,得import javax.annotation.Resource

	作用:直接按照bean的id注入。它可以独立使用
	属性:
	    name:用于指定bean的id

在这里插入图片描述
顺利执行

猜你喜欢

转载自blog.csdn.net/weixin_42727032/article/details/104583743