Spring DI 数据类型—— set 方法注入

news2024/11/27 8:31:39

首先新建项目,可参考 初识IDEA、模拟三层--控制层、业务层和数据访问层

一、spring 环境搭建

(一)pom.xml 导相关坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--    导坐标,不导入该坐标会影响xml文件创建
导完坐标,一定去该页面右边点开 Maven看看是否下载完成,
若不报错,即下载成功-->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.28</version>
        </dependency>
    </dependencies>

    <groupId>org.example</groupId>
    <artifactId>Spring_ioc_04</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

(二)搭建配置文件

依次点击:src ==> main ==> resource 右击  ==> New ==> 找 XML Configuration File ==> 找到 Spring Config 并点击,起名(自己随便起名字),为了好区分,我起名叫 applicationContext

(三)建包建类,写方法

        建包建类,可参考模拟三层--控制层、业务层和数据访问层,我们建立 com.apesource路径(这个路径纯纯属于个人习惯,不影响)下的pojo 包。pojo 包写我们的普通的类,我们写个学生类 Student 吧,类中写好成员变量;text 包就写测试类,具体代码如下:

//Student 学生类
package com.apesource.pojo;

public class Student {
    private int sid;
    private String sname;
    private int sage;
}
//测试类
package com.apesource.test;

public class Test01 {
}

Ok!一切准备就绪,开始演示 DI 数据类型

二、演示 DI 数据类型

2.1 set 注入基本类型与 String

我们要用 setter 方法注入 ,首先得有 set 方法,先去学生类 alt键+ins键 快速生成 set 方法(更多的快捷键使用可以去看看 初识 IDEA)

package com.apesource.pojo;

public class Student {
    private int sid;
    private String sname;
    private int sage;

    public void setSid(int sid) {
        this.sid = sid;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }
}

 然后去我们的 applicationContext.xml 文件做相关配置【这块想了解更清楚可以点击链接; Spring DI 简单演示三层架构——Setter 注入】。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    注入 Student 类-->
    <!--property的name指要通过 setter 给注入的属性名-->
    <!--property的value指要通过 setter 给注入的数据,写具体值-->
    <!--property的ref可以直接引用标签id,Spring DI 简单演示三层架构——set注入有演示-->
    <bean class="com.apesource.pojo.Student" id="student">
        <property name="sage" value="12"></property>
        <property name="sid" value="1"></property>
        <property name="sname" value="唐三"></property>
     </bean>
</beans>

测试【这块想了解更清楚可点击链接Spring DI 简单演示三层架构——Setter 注入】。

package com.apesource.test;

import com.apesource.pojo.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    public static void main(String[] args) {
        //1.加载 Spring 核心配置文件,获取 Spring 容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取对象
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);//返回一个学生的地址
    }

}

测试结果(有地址,测试成功):


如果想看到具体值,我们可以去 Student 类写 get 方法,然后这边调用 get 方法,具体步骤如下:

package com.apesource.pojo;

public class Student {
    private int sid;
    private String sname;
    private int sage;

    public void setSid(int sid) {
        this.sid = sid;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }
/************************get方法是为了测试调用可以看到具体值*************************/
    public int getSid() {
        return sid;
    }

    public String getSname() {
        return sname;
    }

    public int getSage() {
        return sage;
    }
}
package com.apesource.test;

import com.apesource.pojo.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    public static void main(String[] args) {
        //1.加载 Spring 核心配置文件,获取 Spring 容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取对象
        Student student = (Student) applicationContext.getBean("student");
        System.out.println("对象地址:"+student);//返回一个学生的地址
        /******************************为了更方便的查看学生信息,我们调用get方法调用**********************************/
        System.out.println("学生的年龄:"+student.getSage());
        System.out.println("学生的名字:"+student.getSname());
        System.out.println("学生的id号:"+student.getSid());
    }

}

测试结果(这个学生的信息就是我们在 application.xml 中创建的信息,测试成功):


如果想看到具体值,我们也可以去 Student 类写 toString 方法,然后测试就可以看到具体值,具体步骤如下:

package com.apesource.pojo;

public class Student {
    private int sid;
    private String sname;
    private int sage;

    public void setSid(int sid) {
        this.sid = sid;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }
/*********************to String方法为了测试有显示结果****************************/
    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sage=" + sage +
                '}';
    }
}
package com.apesource.test;

import com.apesource.pojo.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    public static void main(String[] args) {
        //1.加载 Spring 核心配置文件,获取 Spring 容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取对象
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);//返回一个学生信息

}

测试结果:

2.2 set 注入复杂类型【 List 、Map 、Set、array数组、properties 】

         首先,我们建一个新的包新的类,可参考模拟三层--控制层、业务层和数据访问层,我们在 com.apesource路径下的pojo 包里再写个 Collection 集合类吧,类中写好成员变量,我们演示复杂类型,就定义变量为 List 、Map 、Set、array数组、properties  这些复杂的类型:

package com.apesource;

import java.util.*;

public class Collection {
    private List list;
    private Map map;
    private Set set;
    private String[] array;
    private Properties properties;
    /****************因为使用set注入,要写set方法****************/
    public void setList(List list) {
        this.list = list;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public void setSet(Set set) {
        this.set = set;
    }

    public void setArray(String[] array) {
        this.array = array;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    /****************为了观察到测试结果的具体值,写 toString方法****************/
    @Override
    public String toString() {
        return "collectionT{" +
                "list=" + list +
                ", map=" + map +
                ", set=" + set +
                ", array=" + Arrays.toString(array) +
                ", properties=" + properties +
                '}';
    }
}

然后去我们的 applicationContext.xml 文件做相关配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--    注入 Collection 类-->
    <bean class="com.apesource.pojo.Collection" id="collection">
        <!--List集合-->
        <property name="list">
            <list>
                <value>油条</value>
                <value>玉米</value>
                <value>包子</value>
                <value>红薯</value>
                <value>胡辣汤</value>
            </list>
        </property>
        <!--Map集合——键值对-->
        <property name="map">
            <map>
                <entry key="红" value="蓝"></entry>
                <entry key="白" value="黑"></entry>
                <entry key="光明" value="黑暗"></entry>
                <entry key="正义" value="邪恶"></entry>
                <entry key="快乐" value="悲伤"></entry>
            </map>
        </property>
        <!--Set集合-->
        <property name="set">
            <set>
                <value>唐三</value>
                <value>小舞</value>
                <value>戴沐白</value>
                <value>朱竹清</value>
                <value>宁荣荣</value>
                <value>奥斯卡</value>
                <value>胖子</value>
            </set>
        </property>
        <!--数组-->
        <property name="array">
            <array>
                <value>喜羊羊</value>
                <value>美羊羊</value>
                <value>懒羊羊</value>
                <value>沸羊羊</value>
                <value>暖羊羊</value>
                <value>慢羊羊村长</value>
            </array>
        </property>
        <!--set诸如还支持properties,下面演示-->
        <property name="properties">
            <props>
<!--                <prop key="键">值</prop>-->
                <prop key="中文">英文</prop>
                <prop key="名字">name</prop>
                <prop key="age">年龄</prop>
                <prop key="语文">数学</prop>
                <prop key="学校">学习</prop>
            </props>
        </property>
    </bean>
</beans>

测试:

package com.apesource.test;

import com.apesource.pojo.Collection;
import com.apesource.pojo.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class Test01 {
    public static void main(String[] args) {
        //1.加载 Spring 核心配置文件,获取 Spring 容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取对象
        Collection collection = (Collection)applicationContext.getBean("collection");
        System.out.println(collection);
    }

}

测试结果(由于所有结果在一行,截图看不完,我将该主要结果复制在下方):

完整结果:

collectionT{list=[油条, 玉米, 包子, 红薯, 胡辣汤], map={红=蓝, 白=黑, 光明=黑暗, 正义=邪恶, 快乐=悲伤}, set=[唐三, 小舞, 戴沐白, 朱竹清, 宁荣荣, 奥斯卡, 胖子], array=[喜羊羊, 美羊羊, 懒羊羊, 沸羊羊, 暖羊羊, 慢羊羊村长], properties={语文=数学, age=年龄, 名字=name, 学校=学习, 中文=英文}}

三、一个类可以被注入多次,但id需唯一

拿简单的学生类做演示吧

学生类不做任何改变,在我们的 applicationContext.xml 文件做相关配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    注入 Student 类-->
<!--    property的name指要通过 setter 给注入的属性名-->
<!--    property的value指要通过 setter 给注入的数据,写具体值-->
<!--    property的ref可以直接引用标签id-->
    <bean class="com.apesource.pojo.Student" id="student">
        <property name="sage" value="12"></property>
        <property name="sid" value="1"></property>
        <property name="sname" value="唐三"></property>
     </bean>
    <bean class="com.apesource.pojo.Student" id="student1">
        <property name="sage" value="12"></property>
        <property name="sid" value="2"></property>
        <property name="sname" value="小舞"></property>
    </bean>
</beans>

测试:

package com.apesource.test;

import com.apesource.pojo.Student;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    public static void main(String[] args) {
        //1.加载 Spring 核心配置文件,获取 Spring 容器对象
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.获取对象
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);//返回一个学生信息
        Student student1 = (Student) applicationContext.getBean("student1");
        System.out.println(student1);//返回一个学生信息
    }
}

测试结果(两个学生都打印出来了,测试成功):

四、总结

DI 数据类型 set 方法可注入三种:

        基本类型与String

        复杂类型,list,set,array,map,properties

        javaBean对象,具体实例可点击链接Spring DI 简单演示三层架构——Setter 注入】

一个类可以被注入多次,但id需唯一

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

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

相关文章

代码随想录算法训练营第二十二天| 77. 组合 216.组合总和III 17.电话号码的字母组合

77. 组合 题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a…

VAuditDemo安装漏洞

目录 VAuditDemo安装漏洞 index.php header.php config.php lib.php install.php 分析结果 漏洞利用 第一步&#xff1a;删除install.lock文件&#xff0c;访问 install.php 抓包 第二步&#xff1a;通过审计构造payload 第三步&#xff1a;修改抓包请求内容&#x…

客户分级管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示为什么选择我官方认证闲鱼玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参考源码获取…

《python语言程序设计》2018版第7章第10题设计一个名为time的类,包括hour minute second

#main代码段 def main():a int(time.time())total_second int(a)current_second total_second % 60total_minutes total_second // 60current_minute total_minutes % 60total_hours total_minutes // 60current_hour total_hours % 24b exCode07.Time(current_hour,cu…

SpringBoot中生成二维码的案例实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

基于数据复杂度的数据库选型

数据模型的选择对于 IT 系统的开发至关重要&#xff0c;它不仅决定了数据存储和处理的方式&#xff0c;影响系统的性能、扩展性以及维护性等。本质上来说&#xff0c;不同的数据模型反映了我们对业务问题的不同思考和抽象程度。 今天我们从不同数据模型对于复杂数据和关系的支…

定制化三防平板:为专业领域打造的坚固解决方案

在科技时代&#xff0c;移动设备已经成为各行各业不可或缺的工具。然而&#xff0c;对于一些特殊行业&#xff0c;如军事、野外勘探、物流、医疗和制造业等&#xff0c;普通商用平板往往无法满足其严苛的工作环境需求。三防平板&#xff0c;以其卓越的防护性能和高度的定制化能…

有了这4款工具,你就知道电脑怎么录屏了!

电脑屏幕录屏这个问题很多人都会碰到&#xff0c;比如教学视频录制&#xff0c;游戏技巧分享&#xff0c;软件操作演示等等。因为场景众多&#xff0c;电脑自带的录屏功能不一定能满足&#xff0c;所以借助第三方工具是一个很有效的办法。如果大家不知道如何录屏&#xff0c;可…

网络安全-安全策略初认识

文章目录 前言理论介绍1. 安全策略1.1 定义&#xff1a;1.2 关键术语&#xff1a; 2. 防火墙状态监测 实战步骤1&#xff1a;实验环境搭建步骤2&#xff1a;配置实现 总结1. 默认安全策略2. 自定义安全策略3. 防火墙状态会话表 前言 who&#xff1a;本文主要写给入门防火墙的技…

【Vue3】集成 Ant Design Vue

【Vue3】集成 Ant Design Vue 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

SX_gitlab可视化操作c语言知识_17

gitlab可视化操作技巧: Merge into current branch直接将远程wjc_GNSS分支的数据拉下来同步到本机当前的分支代码&#xff0c;执行的是合并操作&#xff0c;即多的模块会添加到本地分支&#xff0c;有冲突的地方不行得rebase覆盖才行 修改完代码先暂存更改再在暂存区写入备注&a…

特斯拉FSD硬件进化

特斯拉FSD硬件进化 历经十年&#xff0c;特斯拉自动驾驶软硬件系统不断进化。硬件&#xff1a;HW1.0 到 HW4.0&#xff0c;自研比例与配置性能不断提升。 2013 年&#xff0c;马斯克于推特披露特斯拉正在进行辅助驾驶系统 AP&#xff08;Autopilot System&#xff09;的研发&…

鸿蒙(API 12 Beta3版)【使用ImageSource完成图片解码】图片开发指导

图片解码指将所支持格式的存档图片解码成统一的[PixelMap]&#xff0c;以便在应用或系统中进行图片显示或[图片处理]。当前支持的存档图片格式包括JPEG、PNG、GIF、WebP、BMP、SVG、ICO、DNG。 开发步骤 全局导入Image模块。 import { image } from kit.ImageKit;获取图片。…

Compose知识分享

前言 “Jetpack Compose 是一个适用于 Android 的新式声明性界面工具包。Compose 提供声明性 API&#xff0c;让您可在不以命令方式改变前端视图的情况下呈现应用界面&#xff0c;从而使编写和维护应用界面变得更加容易。” 以上是Compose官网中对于Compose这套全新的Androi…

MidJourney付费失败的原因以及失败后如何取消或续订(文末附MidJourney,GPT-4o教程)

MidJourney付费失败的原因 MidJourney付费失败的原因可能包括支付方式无效、支付信息错误、网络问题、账户设置问题等。 ‌支付方式无效或信息错误‌&#xff1a;如果用户提供的支付方式&#xff08;如信用卡&#xff09;信息不正确&#xff0c;或者支付方式本身不支持该地区…

Python使用matplotlib计算并绘制图像的直方图

除了使用OpenCV计算图像直方图外&#xff0c;matplotlib也提供了直方图计算并绘制功能&#xff0c;只需要把图像&#xff08;或对应通道&#xff09;作为参数输入&#xff0c;即可通过matplotlib输出直方图&#xff08;标准直方图&#xff0c;非条形图表达&#xff09;&#xf…

LVS负载均衡群集-DR模式

一、负载均衡群集 1.数据包流向分析 客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。Director Server 和 Real Server 在同一个网络中&#xff0c;数据通过…

MKS MWH-5匹配器Automatc matching impedance Network手侧

MKS MWH-5匹配器Automatc matching impedance Network手侧

Golang基础语法学习与速成

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.golang介绍 1.1介绍 1.2优势 2.语法 2.1控制台输出 2.2算术运算符 2.3变量常量 2.4for循环 2.5if语句 2.6switch语句 2.7作用域 2.8浮点数和零值 2.8.1浮点数 2.8.2零值 2.9格式化…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 自由流转

学完时间&#xff1a;2024年8月21日 学完排名&#xff1a;第2253名 一、基本概念 1. 流转 在HarmonyOS中&#xff0c;将跨多设备的分布式操作统称为流转。流转能力打破设备界限&#xff0c;多设备联动&#xff0c;使用户应用程序可分可合、可流转&#xff0c;实现如邮件跨设…