我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring Bean属性注入的方式有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring Bean属性注入的方式有哪些

这篇文章主要介绍“Spring Bean属性注入的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean属性注入的方式有哪些”文章能帮助大家解决问题。

属性注入概念

Spring 属性注入(DI依赖注入)有两种方式:setter注入构造器注入

这个注入的属性可以是普通属性(基本数据类型与String等),也可以是一个引用数据类型(主要是对象),或者是一个集合(list、map、set等)

下表是属性注入bean标签中常用的元素

元素名称描述
constructor-arg构造器注入。该元素的 index 属性指定构造参数的索引(从 0 开始),type 属性指定构造参数的类型(type也可以不写,spring会自动识别参数的类型)
propertysetter注入。该元素的 name 属性用于指定 Bean 类中相应的属性名(成员变量名) 。
ref<property> 和 <constructor-arg> 的子元索,用于引用指定bean实例,即 <bean> 元素中的 id 或 name 属性。
value<property> 和 <constractor-arg> 的子元素,用于直接指定常量值。

一、构造器注入

先来介绍下构造器注入:Spring通过调用构造方法为成员变量赋值

  • 使用构造函数实现属性注入大致步骤如下:

  • 在类中添加一个有参构造方法,构造方法内的每一个参数代表一个需要注入的属性;

  • 在 Spring 的配置文件中定义Bean;

  • 在 <bean> 元素内使用 <constructor-arg> 元素,对构造函数内的属性进行赋值,Bean 的构造方法内有多少参数,就需要使用多少个 <constructor-arg> 元素。

下面通过示例介绍如何使用构造器注入

示例1

创建员工类Employee和部门类Dept,并添加有参构造方法(关键!)

public class Employee {    //员工编号    private String empNo;    //员工姓名    private String empName;    //部门信息    private Dept dept;    //有参构造方法    public Employee(String empNo, String empName, Dept dept) {        this.empNo = empNo;        this.empName = empName;        this.dept = dept;    }    ----省略toString方法------  }public class Dept {    //部门编号    private String deptNo;    //部门名称    private String deptName;    //有参构造方法    public Dept(String deptNo, String deptName) {        this.deptNo = deptNo;        this.deptName = deptName;    }    ----省略toString方法------}

编写spring配置文件

<!--部门类属性注入--><bean id="dept" class="com.bighorn.pojo.Dept">    <constructor-arg index="0" value="1"/>    <constructor-arg index="1" value="后端组"/></bean><!--员工类属性注入--><bean id="employee" class="com.bighorn.pojo.Employee">    <constructor-arg index="0" value="1"/>    <constructor-arg index="1" value="bighorn"/>    <constructor-arg index="2" ref="dept"/></bean>

编写运行程序

public static void main(String[] args) {    //获取IoC容器    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");    //从容器中获取对象    Employee employee = context.getBean("employee", Employee.class);    System.out.println(employee);}

结果如下图

Spring Bean属性注入的方式有哪些

注意点

spring识别有参构造方法的参数的三种形式:

index识别,案例一就是如此

<bean id="dept" class="com.bighorn.pojo.Dept">    <constructor-arg index="0" value="1"/>    <constructor-arg index="1" value="后端组"/></bean>

name识别,如下

<bean id="dept" class="com.bighorn.pojo.Dept">    <constructor-arg name="deptNo" value="1"/>    <constructor-arg name="deptName" value="后端组"/></bean>

type识别,如下

<bean id="dept" class="com.bighorn.pojo.Dept">    <constructor-arg type="int" value="1"/>    <constructor-arg type="java.lang.String" value="后端组"/></bean>

三种形式各有各的好处和坏处。
以type识别不适合有多个参数类型相同的情况;以index形式识别,如果参数顺序变了又要重改;以name形式识别,如果参数名变了也要重改。总之,都不太利于解耦

二、setter注入

下面来介绍下setter注入:Spring通过调用setter方法为成员变量赋值。

在【Spring学习笔记(二)】提到过,在 Spring 实例化 Bean 时,IoC 容器会先调用默认构造方法实例化 Bean,然后通过反射机制调用这个 Bean 的 setXxx() 方法,将属性值注入到 Bean 中。

使用setter注入实现属性注入大致步骤如下:

  • 在 类中提供一个默认的无参构造方法(在没有带参构造方法的情况下,可省略),并为所有需要注入的属性提供一个 setter 方法

  • 在 Spring 的 XML 配置文件中定义Bean

  • 使用 <property> 元素对各个属性进行赋值。

下面通过示例介绍如何使用setter注入方法

示例2

创建员工类Employee和部门类Dept,与示例一不同的是,需要添加各个成员变量的setter方法,也需要提供一个无参构造方法

public class Employee {    //员工编号    private String empNo;    //员工姓名    private String empName;    //部门信息    private Dept dept;    //无参构造方法,在没有其他带参构造方法的情况下,可以省略    public Employee() {    }       //各个属性的setter方法    public void setEmpNo(int empNo) {        this.empNo = empNo;    }    public void setEmpName(String empName) {        this.empName = empName;    }    public void setDept(Dept dept) {        this.dept = dept;    }    ----省略toString方法------  }public class Dept {    //部门编号    private String deptNo;    //部门名称    private String deptName;    //无参构造方法,在没有其他带参构造方法的情况下,可以省略    public Dept() {    }    //各个属性的setter方法    public void setDeptNo(int deptNo) {        this.deptNo = deptNo;    }    public void setDeptName(String deptName) {        this.deptName = deptName;    }    ----省略toString方法------}

编写spring配置文件

<!--使用 property 元素完成属性注入        name: pojo类中的属性名称        value: 向属性注入的值      --><!--部门类属性注入--><bean id="dept" class="com.bighorn.pojo.Dept">    <property name="deptNo" value="2"/>    <property name="deptName" value="前端组"/></bean><!--员工类属性注入--><bean id="employee" class="com.bighorn.pojo.Employee">    <property name="empNo" value="114514"/>    <property name="empName" value="lzh"/>    <property name="dept" ref="dept"/></bean>

编写运行程序

public static void main(String[] args) {    //获取IoC容器    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");    //从容器中获取对象    Employee employee = context.getBean("employee", Employee.class);    System.out.println(employee);}

结果如下图

Spring Bean属性注入的方式有哪些

三、如何选择注入方式

如果对象在创建的过程中必须要注入指定的参数,则可以使用构造器注入行,因为使用setter注入有概率不进行注入导致null对象出现

如果对象在创建过程中注入的参数可有可无 ,则可以使用setter注入

常用的是setter注入方式,有必要时可以两者结合使用

关于“Spring Bean属性注入的方式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring Bean属性注入的方式有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring Bean属性注入的方式有哪些

这篇文章主要介绍“Spring Bean属性注入的方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Bean属性注入的方式有哪些”文章能帮助大家解决问题。属性注入概念Spring
2023-07-02

spring注入bean的方式有哪些

Spring注入Bean的方式有以下几种:1. 构造器注入:通过构造器参数来注入依赖的Bean。2. Setter方法注入:通过调用Bean的Setter方法来设置依赖的Bean。3. 接口注入:通过实现接口来注入依赖的Bean。4. 注解
2023-09-05

Spring bean有哪几种注入方式

这篇文章主要讲解了“Spring bean有哪几种注入方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring bean有哪几种注入方式”吧!目录一、Set方式注入pojo层:1.xm
2023-06-20

SpringBoot属性注入的方式有哪些

这篇文章给大家分享的是有关SpringBoot属性注入的方式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、@Value注解注入属性SpringBoot默认可以将application.propertie
2023-06-25

Spring中获取Bean对象的注入方式有哪些

本篇内容主要讲解“Spring中获取Bean对象的注入方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中获取Bean对象的注入方式有哪些”吧!前言获取 bean 对象也叫做对
2023-07-05

Spring容器注入bean的方法有哪些

本文小编为大家详细介绍“Spring容器注入bean的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring容器注入bean的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。@Compon
2023-07-05

spring的注入方式有哪些

Spring的注入方式有三种:1. 构造器注入(Constructor Injection):通过构造方法来注入依赖对象。2. Setter注入(Setter Injection):通过setter方法来注入依赖对象。3. 字段注入(Fie
2023-09-27

Spring注入方式有哪些

本篇内容介绍了“Spring注入方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring的三种注入方式属性(filed)注入这种
2023-06-25

Spring IOC注入方式有哪些

今天小编给大家分享一下Spring IOC注入方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Spring IOC三
2023-06-03

Spring定义Bean的方式有哪些

本文小编为大家详细介绍“Spring定义Bean的方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring定义Bean的方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.通过XML的方式来
2023-07-05

Spring创建bean的方式有哪些

这篇文章主要讲解了“Spring创建bean的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring创建bean的方式有哪些”吧!环境Ubuntu 22.04IntelliJ
2023-07-02

spring装配bean的方式有哪些

Spring装配Bean的方式有以下几种:1. 基于XML配置文件:通过在XML配置文件中定义Bean的方式进行装配,可以使用元素定义Bean的名称、类型、属性等信息。2. 基于注解:通过在Java类上添加特定的注解(如@Component
2023-09-27

Spring常用的注入方式有哪些

Spring常用的注入方式有以下几种:1. 构造器注入(Constructor Injection):通过构造器来注入依赖对象。2. Setter方法注入(Setter Injection):通过setter方法来注入依赖对象。3. 接口注
2023-08-15

Spring依赖注入的方式有哪些

这篇文章主要介绍“Spring依赖注入的方式有哪些”,在日常操作中,相信很多人在Spring依赖注入的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring依赖注入的方式有哪些”的疑惑有所帮助!
2023-07-02

spring接口注入的方式有哪些

Spring接口注入的方式有以下几种:构造器注入:通过构造函数将依赖注入到目标对象中。属性注入:通过属性的setter方法将依赖注入到目标对象中。接口注入:通过接口的实现类将依赖注入到目标对象中。注解注入:通过使用Spring提供的注解(例
2023-10-25

Spring实例化bean的方式有哪些

这篇文章主要介绍了Spring实例化bean的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring实例化bean的方式有哪些文章都会有所收获,下面我们一起来看看吧。一、bean实例化&mdash
2023-07-02

Spring IOC的bean声明方式有哪些

本篇内容主要讲解“Spring IOC的bean声明方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC的bean声明方式有哪些”吧!  Spring简介  Spring
2023-06-02

springioc 中bean的属性有哪些

这篇文章将为大家详细讲解有关springioc 中bean的属性有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.lazy-init="false"默认值为false,指的是bean的
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录