前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring入门到精通-@Autowired和@Resource两者的区别

Spring入门到精通-@Autowired和@Resource两者的区别

作者头像
小土豆Yuki
发布2023-09-02 15:47:30
870
发布2023-09-02 15:47:30
举报
文章被收录于专栏:洁癖是一只狗洁癖是一只狗

什么是自动注入和手动注入

注入方式

  • 构造方法
  • set方法 注入模型
  • AUTOWIRE_NO(默认手动注入)
  • AUTOWIRE_BY_NAME(自动注入通过名字)
  • AUTOWIRE_BY_TYPE(自动注入通过类型)
  • AUTOWIRE_CONSTRUCTOR(自动注入通过构造方法)

默认情况下,Spring使用的注入模型是NO,即手动注入,其他模式都是自动注入,因此当我们在类中仅仅添加一个构造方法或者set方法是不会自动注入的,我们必须明确告诉spring我们要注入的是哪个bean以及属性值,如下代码使用的就是xml形式的用法

手动属性注入

代码语言:javascript
复制
<bean id="" class="">
    <constructor-arg name="参数类型" value="参数值"/>
    <property name="bean对象中字段属性名" value="属性值"/>
</bean>

手动bean注入

代码语言:javascript
复制
<bean id="" class="">
    <constructor-arg ref="需要注入的bean的名称"/>
    <property name="bean对象中字段属性名" ref="需要注入的bean的名称"/>
</bean>

自动注入

代码语言:javascript
复制
<bean id="" class="" autowire="byType|byName|constructor|default"/>

在以前基本都是根据xml配置,完成注入的,但是自从有了注解,基本上不再使用xml这种形式,(反正我已经好久没有写过了,基本上都已经忘记),现在一般常用就两个注解@Autowired和@Resource

面试常问@Autowired和@Resource两者的区别

首先我们要再明确一个概念,注入模型和查找bean的方式不能混为一谈,注入模型做给bean的一个特征会影响bean的一些行为,而查找bean的方式是一种找到某个bean的策略,说白了就是一段代码,spring当中很多地方会 以某种方式查找一个bean,比如在完成属性输入的时候会根据类型去查找这个需要注入的属性,但这并不是AUTOWIRE_BY_TYPE(注入模型)

@Autowired不会改变bean的注入模型(默认情况下bean的注入模型还是AUTOWIRE_NO),@Autowired算是 一种半自动注入,因为他只需要程序员告诉spring需要注入的属性或者方法,而不需要程序员告诉 spring需要注入的属性或者方法他的值到底是哪个bean,@Autowired会根据自己的规则去查找这个bean,所以只能算作半自动注入.

@Autowired和@Resource能完成一样的功能;只不过前者是首先根据类型查找bean,如果没有找到报错(默认情况下@Autowired是一定需要注入一个bean的),如果查找到一个则用找到的 这一个完成注入,如果查找到多个,先把这个多个放到map当中,继而根据属性的名字冲map当中去确定一个唯一,能确定则使用确定的这个,如果map当中通过名字还是无法确定则报错.

@Resource在没有配置name的情况下首先根据名字查找,如果名字能查找到则返回这个查找到的(spring容器的原则是name唯一,所以不存在通过名字能查找到多个的情况),如果通过名字查找不到(需要注意的是这里的前提是没有配置name的情况,spring觉得名字无所谓),因为对名字无要求,所以会再根据类型查找,那么走的就是@Autowired这一套,如果配置了名字,spring 觉得对名字有严格要求,所以只能根据你配置的名字查找,如果查找不到则报错,找到了则用,不会走@Autowired这一套了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洁癖是一只狗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档