Spring框架----自动按照类型注入的Autowired注解

38 篇文章 1 订阅
23 篇文章 2 订阅

当执行如下代码时(配置文件中未注入)

private IAccountDao accountDao;
public void saveAccount() {
    accountDao.saveAccount();
}

运行时显示空指针异常
在这里插入图片描述
Autowired
作用:自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。
出现位置:可以是成员变量上,也可以是方法上

@Autowired
private IAccountDao accountDao;
public void saveAccount() {
    accountDao.saveAccount();
}

在这里插入图片描述
细节:在使用注解注入时,set方法就可以不是必须的了
在这里插入图片描述SpringIOC容器时一个Map结构。Map的key是String类型的,Map的value是Object类型的,那目前我们的容器里面有Service对象,id是对应的key。同时还有dao的id(key)和对象(value)。我们容器中现在有这两个对象。我们要注入的变量是accountDao。
在这里插入图片描述
private是访问修饰符,IaccountDao叫数据类型,accountDao叫变量名称。null指的是数据类型。
Autowerd作用是自动按照类型注入,它是使用了IaccountDao,接下来直接在springIOC容器中找,跳过了key,直接看value。找到了IaccountDaoImpl(虽然是实现类,可以看成接口类型,就可以注入成功),就会把它注入到这个变量中来。
如果IOC容器中没有任何bean的类型和要注入的变量匹配,则报错
如果容器中有两个实现类

@Repository("accountDao2")
public class AccountDaoImpl2 implements IAccountDao {
    public void saveAccount() {
        System.out.println("保存了账户222222");
    }
}

此时又来了一个dao的实现类。也可以看成dao的接口,此时就不止一个能匹配的上了。多个匹配应该是怎样的呢,默认情况会报错
在这里插入图片描述
试想,如果将前面的变量名改成
在这里插入图片描述
便可以运行成功
在这里插入图片描述
如果IOC容器中有多个类型匹配时,首先按照类型圈定出来匹配的对象,然后接下来会根据变量名称作为bean的id
在圈定出来的这两个里面继续查找,哪个跟他一样,如果有一样的,也可以注入成功,否则,就报错。

所以从这点上来说,要用autowired解决问题,要是两个bean都符合,就要改id,这显然不是我们想看见的。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值