Spring @AutoWired注解用法解释(超级易懂)

9 篇文章 0 订阅

@Autowired的应用场景

我们开启Spring服务的时候,它会根据声明先扫描配置文件中的bean(注解配置同理), 再根据bean中类的全限定名去寻找它,一般为我们自己声明的pojo(实体类), 然后这时如果有@Autowired注解则会根据类型寻找其它的被Spring托管的bean进行自动注入, 调用默认的构造函数。

用法解释

下面看一个简单的例子:
这里是一个spring项目的基本结构
在这里插入图片描述
我们有三个实体类并且都是spring的bean
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Test方法
在这里插入图片描述
注意到我们这里的people类中的cat和dog上都标注了@Autowired,我们都很清楚对象的声明创建过程, 类似于people的组合类需要先创建cat对象和dog对象的实例, 而依靠spring的依赖注入(cat和dog已被spring托管), 我们再加上@Autowired, spring便会自动的为我们在bean中寻找和注解下类型匹配的bean去进行自动注入。 借此机制我们可以省略掉set方法, 构造方法。

执行test方法
运行成功, 未报空指针异常, 说明cat和dog被自动创建及注入。

还有一个注意点是如果显示的定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空

@Autowired(required = false)

使用的位置

我们可以在类中属性上,方法上使用@Autowired注解, 其中用在方法上时spring会将参数依次寻找bean注入, 需要注意的是参数一定都要找到能够匹配的bean, 否则会报出异常

org.springframework.beans.factory.BeanCreationException

@Autowired和@Qualifier组合使用

如果您在bean中有相同的类的全限定名, 那么在应用@Autowired时按照逻辑来说就会出现歧义, 这时spring为我们准备了@Qualifier注解来解决这个问题。

public class People{
    @Autowired
    @Qualifier(value = "cat11")
    private Cat cat;

    @Autowired
    @Qualifier(value = "dog222")
    private Dog dog;
 
    private String name;
}

在这里插入图片描述
在这里由于spring无法由类型去装配了,使用@Qualifier可以通过byName方式去寻找标准就是bean的id(唯一限定名)。

@AutoWired和@Resource的区别?

@AutoWired默认以类型进行查找,@Resource默认以名称进行查找

@AutoWired(required=false) + @Qualifier(“user”) == @Resource(name=“user”)

其中@Resource注解是jdk1.6后才有的

结语

以上为个人的一点理解,说的可能不对欢迎指正。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值