栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

@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后才有的

结语

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301484.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号