ssm框架注解的作用,Spring框架----自动按照类型注入的Autowired注解

 2023-09-28 阅读 30 评论 0

摘要:当执行如下代码时(配置文件中未注入) private IAccountDao accountDao; public void saveAccount() {accountDao.saveAccount(); } 运行时显示空指针异常 Autowired 作用:自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配&#x

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

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,这显然不是我们想看见的。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/101713.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息