Spring @Autowired 的注入规则

一、什么是@Autowired(自动注入)?

@Autowired 自动注入,将SpringIOC容器中已经注册好的对象注入到程序员定义的类型中,使其

实例化(相当于new一个对象给定义的类型)并可用, 如:

@Autowired
IAccountDao abc;
那么 @Autowired自动注入的规则是什么呢?

@Autowired 先根据定义类型匹配再根据key匹配并返回

二、@Autowired注入规则:

1、图解在这里插入图片描述
2、详细流程

@Autowired 首先会根据类型去SpringIOC容器中跳过id(key)的匹配,

直接在value中匹配和本身相符的类型

如果找到的类型是唯一且匹配则返回这个对象并注入到用@Autowired标识的定义类型中。

如这里的IAccountDao类型就应该在SpringIOC容器的value中寻找IAccountDao类型,

由于AccountDao和AccountDao2实现了IAccountDao接口,所以默认AccountDao和AccountDao2

是IAccountDao类型的。这时你们会发现,由于这两个实现类都实现了IAccountDao接口,

很明显匹配到的类型是不唯一的,自然不能返回了。

所以这时我们还有一个筛选依据,

就是根据key来匹配

那么我们匹配的时候拿什么跟这个key去匹配呢????

没错,就是用 @Autowired 标识定义类型的变量名

@Autowired
IAccountDao abc;

所以我们拿到的是“abc”这个key,

最后我们根据这个key获取到了key为“abc"的value,也就是AccountDao2了


或许有的小伙伴好奇,也不清楚SpringIOC容器中的key是如何定义的:

SpringIOC容器中的key定义有两种方式:

1、默认的:如果@Repository不指定名称,则key就是第一个字母小写的类名

2、@Repository(“abc”)指定这个key叫"abc"

@Repository("abc")
public class AccountDao2 implements IAccountDao{
    @Override
    public void saveAccount() {
        System.out.println("保存账户2");
    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值