当前位置: 首页 > news >正文

【Spring】Spring Bean的4种依赖注入方式

文章目录

  • 前言
  • 1. 构造方法注入
  • 2. set方法注入
  • 3. 自动装配
  • 4. 注解

前言

所谓依赖注入,其实就是给对象里的属性赋值,因为对象里有其他对象,因此就形成了依赖。Spring有4种方式来给属性赋值:

  1. 构造方法注入
  2. set方法注入
  3. 自动装配
  4. 注解

1. 构造方法注入

构造方法注入是指在构造方法中注入属性或者对象来实现依赖注入,如下所示,在标签中定义一个id为userDaoImpl的Bean,并通过注入了name为username,value为admin的值,注入完成后直接通过this.username获取到值admin。其中引用类型使用ref属性,基本类型使用value属性。

public class UserDaoImpl {private String username;public UserDaoImpl(String username) {this.username = username;}
}
  <bean id="userDaoImpl" class="com.example.UserDaoImpl"><constructor-arg name="username" value="admin"></constructor-arg></bean>

2. set方法注入

set方法注入就是通过在类中实现get、set方法来实现属性或者对象的依赖注入,如下所示,在标签中定义一个id为userDaoImpl的Bean,并通过注入了name为username,value为admin的值,注入完成后直接通过getUsername()获取到值admin。

public class UserDaoImpl {private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}
}
<bean id="userDaoImpl" class="com.example.UserDaoImpl"><property name="username" value="admin"></property>
</bean>

3. 自动装配

Spring提供了自动装配的功能,简化了我们的配置,自动装配默认是不打开的,常用的方式有两种:

  • byName:通过参数名自动装配,如下所示,id为userService的的autowire被设置为byName后,IOC容器会通过名字来自动装配,发现UserService类中有个叫userDao的属性,然后看看IOC容器中有没有id为userDao的,如果有就装配进去。
<bean id="userDao" class="com.example.UserDao"></bean>
<bean id="userService" class="com.example.UserService" autowire="byName"/>
  • byType:通过参数类型自动装配,当autowire被设置为byType后,IOC容器会看看里面有没有UserDao类型的,有就装配进去。
<bean id="userDao" class="com.example.UserDao"></bean>
<bean id="userService" class="com.example.UserService" autowire="byType"/>

4. 注解

  • @Autowired注解可以实现自动装配,只要在对应的属性上标记该注解,但是@Autowired注解只按照byType注入。
public class UserController {@Autowiredprivate IUserService userService;
}
  • @Resource注解可以实现自动装配,它有两个重要属性name和type,name属性解析为bean的名字,type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

  • @Autowired注解和@Resource注解的作用相同,只不过@Autowired按照byType注入,如果@Autowired想使用名称可以结合@Qualifier注解进行使用

http://www.lryc.cn/news/159752.html

相关文章:

  • overleaf 参考文献引用,创建引用目录.bib文件,在文档中引用参考文献,生成参考文献列表
  • 算法通关村第十八关:青铜挑战-回溯是怎么回事
  • 【Redis】深入探索 Redis 的数据类型 —— 字符串 string
  • Linux操作命令笔记
  • 1.8 工程相关解析(各种文件,资源访问
  • unity 前后左右 移动
  • 计算机视觉传统图像处理库opencv的使用
  • 【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate
  • vue + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)
  • 用 Python 微调 ChatGPT (GPT-3.5 Turbo)
  • 单目标应用:基于蜘蛛蜂优化算法(Spider wasp optimizer,SWO)的微电网优化调度MATLAB
  • 2023年7月京东饮料行业数据分析(京东运营数据分析)
  • 执行 JUnit 单元测试前,修改环境变量
  • openGauss学习笔记-63 openGauss 数据库管理-资源池化架构
  • 计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python
  • ChatGPT如何应对紧急情况和灾害应对?
  • ElementUI浅尝辄止37:Select 选择器
  • PCL 基于任意四点计算球心坐标
  • 飞书即时消息无需API开发连接Cohere,打造飞书AI智能问答助手
  • FPGA实现Cordic算法——向量模式
  • 【常用代码14】el-input输入框内判断正则,只能输入数字,过滤汉字+字母。
  • [NLP]LLM--使用LLama2进行离线推理
  • 初始化一个Gin框架的Go-Web项目
  • Mybatis日期检索格式报错
  • 如何把Android Framework学彻底?一条龙学习
  • uview indexList 按字母跳转不了
  • 安全模型中的4个P
  • 网站优化搜索引擎与关键词
  • aws-msk-托管kafka集群的简单使用(VPC内部访问:无验证和SASL认证)
  • Unity UGUI(二)核心组件