NO.02 依赖注入

news2025/1/13 10:06:31

目录

1、前言

2、两种依赖注入的方式

2.1 依赖注入之setter注入

2.2 依赖注入之构造器注入

3、依赖注入之特殊值处理

3.1 字面量赋值

3.2 null值赋值

3.3 XML实体(<)

4、完整测试类


1、前言

依赖注入就是为类的属性赋值,在我们获取bean的时候,bean的各个属性有初始值。以依赖注入的方式为类的属性赋值有两种方式,分别为:setter注入、构造器注入,在本篇中以Minister实体类为例。Minister实体类如下:

public class Minister {
    private Integer id;
    private String ministerName;
    private Integer age;
    private char gender;
    private Integer ministerDutie;

    public Minister(Integer id, String ministerName, Integer age, char gender, Integer ministerDutie) {
        this.id = id;
        this.ministerName = ministerName;
        this.age = age;
        this.gender = gender;
        this.ministerDutie = ministerDutie;
    }

    public Minister() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMinisterName() {
        return ministerName;
    }

    public void setMinisterName(String ministerName) {
        this.ministerName = ministerName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public Integer getMinisterDutie() {
        return ministerDutie;
    }

    public void setMinisterDutie(Integer ministerDutie) {
        this.ministerDutie = ministerDutie;
    }

    @Override
    public String toString() {
        return "Minister{" +
                "id=" + id +
                ", ministerName='" + ministerName + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", ministerDutie=" + ministerDutie +
                '}';
    }
}

2、两种依赖注入的方式

2.1 依赖注入之setter注入

在Spring配置文件中配置bean时,在property子标签中配置类中各个属性的值。

    <bean id="Minister1" class="com.review.spring.pojo.Minister">
        <property name="id" value="1" ></property>
        <property name="ministerName" value="蒙恬" ></property>
        <property name="age" value="20" ></property>
        <property name="gender" value="男" ></property>
        <property name="ministerDutie" value="2" ></property>
    </bean>

property标签:通过组件类的setXxx()方法给组件对象设置属性

name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关)

value属性:指定属性值

在测试类中根据id和类型的方式获取bean,并输出bean。

    @Test
    public void getBeanToMinister1() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister1",Minister.class);
        System.out.println(minister);
    }

 输出结果:

2.2 依赖注入之构造器注入

若使用构造器注入,实体类中必须有有参构造方法。下面是以构造器注入的方式配置bean,在bean标签的constructor-arg子标签中配置实体类中各个属性的值。

    <bean id="Minister2" class="com.review.spring.pojo.Minister">
        <constructor-arg name="id" value="2" ></constructor-arg>
        <constructor-arg name="ministerName" value="蒙毅" ></constructor-arg>
        <constructor-arg value="18"></constructor-arg>
        <constructor-arg value="男"></constructor-arg>
        <constructor-arg value="2"></constructor-arg>
    </bean>

此时name属性可以忽略不写,但必须按照实体类构造方法中的属性顺序赋值。

在测试类中根据id和类型的方式获取bean,并输出bean。

    @Test
    public void getBeanToMinister2() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister2",Minister.class);
        System.out.println(minister);
    }

结果输出

3、依赖注入之特殊值处理

3.1 字面量赋值

当我们声明一个变量age的时候,给age赋值为18,则age就不代表单词age了,而是作为一个变量的名字。当我们引用age 的时候,我们实际上拿到的值是18。如果age带双引号如“age”,那么它就表示一个age单词。“age”就代表它本身,这就是字面量。

在bean标签中的property子标签,使用value属性给bean的属性赋值时,Spring会把value属性的值看做字面量。

如:

<property name="ministerName" value="蒙恬" ></property>

3.2 null值赋值

在bean中给类的属性为null赋值时,不能直接给property标签中的value属性赋null,如下:

<property name="ministerName" value="null" ></property>

以上结果Ministerd的属性ministerName值不为空(null),相反的ministrName的值为字符串“null”。

正确的赋值方式如下,ministerName的值为空(null)。

<property name="ministerName" ><null/></property>

3.3 XML实体(<)

在XML中为类的属性赋值时,值之中含有'<'时,不能在XML文档中随便使用。如要使用'<'有以下两种方式:使用XML实体来代替、使用CDATA节。

①使用XML实体来代替

&lt表示'<',注意:&lt后的分号';'不能忘记,否则报错。

<property name="ministerName" value="20&lt;21" ></property>

②使用CDATA节

CDATA中的C代表Character,是文本、字符的含义,CDATA就表示纯文本数据。XML解析器看到CDATA节就知道这里是纯文本,就不会当作XML标签或属性来解析,所以CDATA节中写什么符号都随意。

此时value属性要使用value标签,在标签内为value为name属性表示的变量赋值。

<property name="ministerName"  ><value><![CDATA[20<21]]></value></property>

4、完整测试类

public class MinisterTest {
    @Test
    public void getBeanToMinister1() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister1",Minister.class);
        System.out.println(minister);
    }

    @Test
    public void getBeanToMinister2() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister2",Minister.class);
        System.out.println(minister);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络实现猴痘疾病图像分类 - P4

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;Pytorch实战 | 第P4周&#xff1a;猴痘病识别&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录…

Python数据分析实战-对列表里面的元素绘制词云图(附源码和实现效果)

实现功能 词云也叫文字云&#xff0c;是一种可视化的结果呈现&#xff0c;原理就是统计文本中高频出现的词&#xff0c;将结果生成一张图片&#xff0c;直观的获取数据的重点信息 实现代码 from wordcloud import WordCloud import matplotlib.pyplot as plt# 假设你的字符串…

浅谈大数据智能审计如何助力审计工作

随着互联网大数据的持续发展&#xff0c;大数据审计近年来面对着相等的机遇和挑战。那么&#xff0c;如果利用大数据等相关技术对审计工作作出突出贡献&#xff0c;单位和企业又该从何入手做好大数据审计工作应用&#xff0c;这些都成为每位审计人员将要面临的重要问题。 1. 政…

电机控制软件框架

应用层包括main 主函数模块&#xff0c;ISR 中断处理函数模块、时基Systick 模块和BLDC 应用接口模块&#xff1b;算法层包括BLDC Algorithm 模块和PID control 模块&#xff1b;驱动层&#xff08;Driver layer&#xff09;&#xff1a;包括GD32Fxx_Standard_peripheral libra…

基于SSM的OA办公系统Java企业人事信息管理jsp源代码MySQL

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于SSM的OA办公系统 系统有1权限&#xff1a;管理员…

课程项目设计--spring security--认证管理功能--宿舍管理系统--springboot后端

写在前面&#xff1a; 还要实习&#xff0c;每次时间好少呀&#xff0c;进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …

台积电美国厂施工现场混乱,真令人头痛 | 百能云芯

近日&#xff0c;英伟达公司的财报表现异常亮眼&#xff0c;摩根士丹利不仅点名了台积电成为最大的受益者&#xff0c;还预测每售出一颗H100英伟达芯片&#xff0c;台积电就能获得900美元的利润。然而&#xff0c;美国媒体却曝出了一则不利的消息&#xff0c;称美国亚利桑那州的…

Hbase文档--架构体系

阿丹&#xff1a; 基础概念了解之后了解目标知识的架构体系&#xff0c;就能事半功倍。 架构体系 关键组件介绍&#xff1a; HBase – Hadoop Database&#xff0c;是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;利用HBase技术可在廉价PC Server上搭建起…

vue3 vite使用 monaco-editor 报错

报错&#xff1a;Unexpected usage at EditorSimpleWorker.loadForeignModule 修改配置&#xff1a; "monaco-editor-webpack-plugin": "^4.2.0",删除不用 版本&#xff1a; "monaco-editor": "^0.28.1", 修改如下&#xff1a; opti…

Python“牵手”虾皮(Shopee)商品详情API接口运用场景及功能介绍,虾皮API接口申请指南

虾皮&#xff08;Shopee&#xff09;电商API接口是针对虾皮提供的电商服务平台&#xff0c;为开发人员提供了简单、可靠的技术来与虾皮电商平台进行数据交互&#xff0c;实现一系列开发、管理和营销等操作。其中包括商品详情API接口&#xff0c;通过这个API接口商家可以获取商品…

SLS日志解析配置

分隔符模式 INFO|2023-04-10T11:05:30.12808:00|X.X.X.X|ACCESS_ALLOWED|1 模式&#xff1a;分隔符模式 日志样例&#xff1a;贴文档说明中的样例&#xff0c;或者直接在SLS历史日志里找一行 分隔符&#xff1a;竖线 日志抽取内容Key用文档中说明的变量名 是否接受部分字段&am…

CMIP6中的模式比较计划、CMIP6数据下载、单点降尺度、统计方法的区域降尺度、基于WRF模式的动力降尺度及气候变化、生态、水文等典型案例

CMIP6数据被广泛应用于全球和地区的气候变化研究、极端天气和气候事件研究、气候变化影响和风险评估、气候变化的不确定性研究、气候反馈和敏感性研究以及气候政策和决策支持等多个领域。这些数据为我们理解和预测气候变化&#xff0c;评估气候变化的影响和风险&#xff0c;以及…

Docker容器与虚拟化技术:Harbor私有仓库部署与迁移

目录 一、理论 1.本地私有仓库 2.Harbor 二、实验 1.Docker搭建本地私有仓库 2.docker-compose部署及配置 3.harbor部署及配置 4.登录创建项目 5.在其他客户端上传镜像 6. harbor维护 7.移除 Harbor 服务容器同时保留镜像数据/数据库&#xff0c;并进行迁移 三、问题…

把Android手机变成电脑摄像头

一、使用 DroidCam 使用 DroidCam&#xff0c;你可以将手机作为电脑摄像头和麦克风。一则省钱&#xff0c;二则可以在紧急情况下使用&#xff0c;比如要在电脑端参加一个紧急会议&#xff0c;但电脑却没有摄像头和麦克风。 DroidCam 的安卓端分为免费的 DroidCam 版和收费的 …

服务器数据恢复-服务器RAID6硬盘故障离线的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器中有一组由6块磁盘组建的RAID6磁盘阵列。服务器作为WEB服务器使用&#xff0c;上面运行了MYSQL数据库以及存放了网站代码和其他数据文件。 服务器故障&#xff1a; 在服务器运行过程中该raid6阵列中有两块磁盘先后离线&#xff0c;但是管…

火山引擎DataLeap基于Apache Atlas自研异步消息处理框架

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 字节数据中台DataLeap的Data Catalog系统通过接收MQ中的近实时消息来同步部分元数据。Apache Atlas对于实时消息的消费处理不满足性能要求&#xff0c;内部使用Flin…

Mysql索引、事务与存储引擎 (索引)

一、索引 1、索引的概念&#xff1a; 索引就是一种帮助系统能够更加快速的查找信息的数据结构。 2.索引的作用&#xff1a; ①数据库利用各种快速定位技术&#xff0c;能够大大加快查询速度&#xff0c;这是创建索引的最主要的原因。 ②当表很大或查询涉及到多个表时&#xff0…

Linux安装软件每次靠百度,这次花了些时间,终于算是搞明白了

Linux下安装命令虽然经常使用&#xff0c;但也仅仅是会使用&#xff0c;每次再用时依然的百度 。于是就花了些时间整体的梳理了一番&#xff0c;以便于更好的理解。 1.安装流程介绍 在Linux下安装软件&#xff0c;其实也是遵循着和Windows一样的安装流程。 首先&#xff0c;…

巨人互动|Facebook海外户Facebook游戏全球发布实用策略

Facebook是全球最大的社交媒体平台之一&#xff0c;拥有庞大的用户基数和广阔的市场。对于游戏开发商而言&#xff0c;利用Facebook进行全球发布是一项重要的策略。下面小编将介绍一些实用的策略帮助开发商在Facebook上进行游戏全球发布。 巨人互动|Facebook海外户&Faceboo…

淘宝API技术解析,实现按图搜索淘宝商品

淘宝提供了开放平台接口&#xff08;API&#xff09;来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现&#xff1a; 1. 获取开放平台的访问权限&#xff1a;首先&#xff0c;您需要在淘宝开放平台创建一个应用&#xff0c;获取访问淘宝API的权限。具体的申请步骤和要求…