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

04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号

1.1注入外部Bean

在之前使用的案例就是注入外部Bean的方式。

<!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id="userServiceBean" class="com.powernode.spring6.service.UserService"><property name="userDao" ref="userDaoBean"/></bean></beans>

外部Bean的特点:bean定义到外面,在property标签中使用ref属性进行注入。通常这种方式是常用。

1.2注入内部Bean

内部Bean的特点:在bean标签中嵌套bean标签,以取代property种的ref标签.少用.

<!-- ref标签指明注入的bean的id没有了ref标签,用另一个bean标签的class标签指明注入的bean所在的类(进而找到该bean)--><bean id="userServiceBean" class="com.powernode.spring6.service.UserService"><property name="userDao"><bean class="com.sunsplanter.spring6.dao.UserDao"/></property></bean>

2.1注入简单类型

我们之前在进行注入的时候,是将获取到的对象注入到另一个对象中。

 public void setUserDao(UserDao userDao){this.userDao = userDao;}

对于简单类型,也就是
● 基本数据类型
● 基本数据类型对应的包装类
● String或其他的CharSequence子类
● Number子类
● Date子类
● Enum子类
● URI
● URL
● Temporal子类
● Locale
● Class
● 另外还包括以上简单值类型对应的数组类型
该如何注入?
和对象注入的基本方法完全一致.
即完成spring配置文件,src中定义要注入的类,对象,属性,test中进行单元测试.

项目结构
在这里插入图片描述

其中,JDBC测试简单数据类型string;SimpleValue_Array测试数组,且数组中数据是简单数据类型;NonSimpleValue_Array测试数组,且数组中数据是非简单数据类型,这三组测试公用一个set-di.xml的spring配置,共用一个SpringDITest测试类.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--测试注入JDBC数据源property标签的name属性是提示set方法名。property标签的value属性是要注入的bean对象的直接值(注入简单类型时可用)。property标签的ref属性是要注入的bean对象的id。property标签的ref子标签是声明要注入数组的非简单数据的bean的id。--><bean id="myDataSource" class="com.sunsplanter.JDBC.MyDataSource"><property name="driver" value=""/><property name="url" value="jdbc:mysql.cj.jdbc.Driver"/><property name="username" value="root"/><property name="password" value="Mysql998168"/></bean><!--    测试注入数组,且数组个数据是简单类型,因此在array中使用value子标签注入在property下添加一个array子标签--><bean id="person" class="com.sunsplanter.SimpleValueTest.SimpleValue_Array"><property name="favariteFoods"><array><value>鸡排</value><value>汉堡</value><value>鹅肝</value></array></property></bean><!--    测试注入数组,且数组中数据是非简单类型,因此在array中使用value子标签注入--><bean id="goods1" class="com.sunsplanter.NonSimpleValue_Array.Goods"><property name="name" value="西瓜"/></bean><bean id="goods2" class="com.sunsplanter.NonSimpleValue_Array.Goods"><property name="name" value="苹果"/></bean><bean id="order" class="com.sunsplanter.NonSimpleValue_Array.Order"><property name="goods"><array><!--Order是一个数组.且数组中元素是非简单类型,因此在array中采用ref标签注入--><ref bean="goods1"/><ref bean="goods2"/></array></property></bean><!--    list集合有序可重复set集合无序不可重复--><!--提前在SpringDITest中声明一个set,并指明是String类型private Set<String> phones;<bean id="peopleBean" class="com.powernode.spring6.beans.People"><property name="phones"><set>非简单类型可以使用ref,简单类型使用value<value>110</value><value>110</value><value>120</value></set></property></bean>提前在SpringDITest中声明一个list,并指明是String类型private List<String> names;<bean id="peopleBean" class="com.powernode.spring6.beans.People"><property name="names"><list><ref bean="people1"/><ref bean="people2"/></list></property></bean>--><!--    注入键值对的集合map--><!--提前在SpringDITest中声明一个Map键值对,并指明是键是整数类型,值是String类型private Map<Integer, String> addrs;<bean id="peopleBean" class="com.powernode.spring6.beans.People"><property name="addrs"><map>如果key是非简单类型,使用 key-ref 属性如果value是非简单类型,使用 value-ref 属性<entry key="1" value="北京大兴区"/><entry key="2" value="上海浦东区"/><entry key="3" value="深圳宝安区"/></map></property></bean>-->
<!--    cndata是xml提供的语法,有了这个xml就不解析--><!--    p命名空间注入本质还是set注入,只不过其让Spring配置更简单--></beans>
package com.sunsplanter.test;import com.sunsplanter.JDBC.MyDataSource;
import com.sunsplanter.NonSimpleValue_Array.Order;
import com.sunsplanter.SimpleValueTest.SimpleValue_Array;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringDITest {@Test//测试注入JDBC数据源,getBean的name参数即set-di.xml中的bean的idpublic void testMyDataSource(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");MyDataSource myDatataSource = applicationContext.getBean("myDataSource", MyDataSource.class);System.out.println(myDatataSource);}@Test//测试注入数组,且数组元素为简单类型public void testArraySimple(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");SimpleValue_Array simpleValueArray = applicationContext.getBean("person", SimpleValue_Array.class);System.out.println(simpleValueArray);}@Test//测试注入数组,且数组元素为非简单类型public void testArray(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");Order order = applicationContext.getBean("order", Order.class);System.out.println(order);}
}

package com.sunsplanter.JDBC;import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;//数据源:所有提供connection对象的都是数据源,必须实现DataSource
public class MyDataSource implements DataSource{//获取数据库连接对象需要4个信息//这四个数据都是简单数据,用Spring容器管理他们private String driver;private String url;private String username;private String password;public void setDriver(String driver) {this.driver = driver;}public void setUrl(String url) {this.url = url;}public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "MyDataSource{" +"driver='" + driver + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}@Overridepublic Connection getConnection() throws SQLException {return null;}@Overridepublic Connection getConnection(String username, String password) throws SQLException {return null;}@Overridepublic PrintWriter getLogWriter() throws SQLException {return null;}@Overridepublic void setLogWriter(PrintWriter out) throws SQLException {}@Overridepublic void setLoginTimeout(int seconds) throws SQLException {}@Overridepublic int getLoginTimeout() throws SQLException {return 0;}@Overridepublic Logger getParentLogger() throws SQLFeatureNotSupportedException {return null;}@Overridepublic <T> T unwrap(Class<T> iface) throws SQLException {return null;}@Overridepublic boolean isWrapperFor(Class<?> iface) throws SQLException {return false;}
}

package com.sunsplanter.NonSimpleValue_Array;//本次测试用set方法注入数组,且数组元素是非简单类型
//具体来说,定义两个类,分别是Goods和Order,其中,每个Order可能包含多个Good
public class Goods {private String name;public Goods() {}public Goods(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Goods{" +"name='" + name + '\'' +'}';}
}package com.sunsplanter.NonSimpleValue_Array;
import java.util.Arrays;public class Order {// 一个订单中有多个商品//声明一个数组,将传来的good全部放进数组private Goods[] goods;public Order() {}public Order(Goods[] goods) {this.goods = goods;}public void setGoods(Goods[] goods) {this.goods = goods;}@Overridepublic String toString() {return "Order{" +"goods=" + Arrays.toString(goods) +'}';}
}

相关文章:

04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号

1.1注入外部Bean 在之前使用的案例就是注入外部Bean的方式。 <!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id"userServiceBean" class"com.powernode.spring6.service.UserService…...

Linux引导和服务管理

目录 一.Linux引导&#xff1a; 1、Linux开机启动的完整过程&#xff1a; 2、bios的作用&#xff1a; 3、boot&#xff1a; 4.mbr: 5、grub&#xff1a; 6、加载内核文件&#xff1a; 7、启动进程&#xff1a; 8、centos6与centos7的区别&#xff1a; 9、完整的过程 …...

HarmonyOS 应用开发学习笔记 ets自定义组件及其引用 @Component自定义组件

Component注解的作用是用来构建自定义组件 Component组件官方文档 自定义组件具有以下特点&#xff1a; 可组合&#xff1a;允许开发者组合使用系统组件、及其属性和方法。 可重用&#xff1a;自定义组件可以被其他组件重用&#xff0c;并作为不同的实例在不同的父组件或容器…...

在做题中学习(43):长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;同向双指针-------滑动窗口算法 解释&#xff1a;本是暴力枚举做法&#xff0c;因为全部是正整数&#xff0c;就可以利用单调性和双指针解决问题来节省时间 思路&#xff1a; 如上面图&am…...

如何将 element-ui 中的 el-select 默认展开

<el-form-item label"藕粉桂花糖糕" prop"state" required><el-selectref"mySelect"v-model"form.state"style"width: 280px"placeholder"请选择"><el-option label"藕粉" :value"…...

Typora基本用法

文章目录 一、标题标题快捷键 二、段落1.换行2.分割线 三、文字显示1.字体2.上下标 四、列表1.无序列表2.有序列表3.任务列表 五、区块显示六、代码显示1.行内代码2.代码块 七、链接八、脚注九、图片插入十、表格十一、流程图十二、表情符号十三、数学公式的输入1.公式的插入①…...

读元宇宙改变一切笔记02_元素(上)

1. 很多组织和机构都想在元宇宙的定义上掌握话语权&#xff0c;使得它的定义中存在矛盾之处&#xff0c;也有大量含义混淆之处 1.1. 微软 1.1.1. 在谈论“多个元宇宙” 1.1.2. 微软首席执行官萨提亚纳德拉将元宇宙描述为一种可以将“整个…...

听GPT 讲Rust源代码--compiler(2)

File: rust/compiler/rustc_codegen_cranelift/build_system/prepare.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_codegen_cranelift/build_system/prepare.rs文件的作用是为Cranelift代码生成器构建系统准备依赖项。 具体来说&#xff0c;该文件的主要目标是处理Crane…...

SpringCloud系列篇:核心组件之负载均衡组件

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.负载均衡组件是什么 二.负载均衡…...

多线程模板应用实现(实践学习笔记)

出处&#xff1a;B站码出名企路 个人笔记&#xff1a;因为是跟着b站的教学视频以及文档初步学习&#xff0c;可能存在诸多的理解有误&#xff0c;对大家仅供借鉴&#xff0c;参考&#xff0c;然后是B站up阳哥的视频&#xff0c;我是跟着他学。大家有兴趣的可以到b站搜索。加油…...

Linux系统中MYSQL重置密码(针对root忘记密码)

⼀ .进⼊MySql配置⽂件中 vi /etc/my.cnf 在最后⼀⾏添加免密码登陆: skip-grant-tables :wq 保存退出 ⼆.重启MySql service mysql restart 或 systemctl restart mysqld.service 三. 登陆数据库 mysql -uroot -p 让输⼊密码直接回⻋就可以 四.修改MySql密码 use mysql…...

蓝桥杯基础知识1 字母大小写转换

蓝桥杯基础知识1 字母大小写转换 isalpha()判断一个字符是否为字母。 isalnum()判断一个字符是否为十进制数字字符或者字母&#xff0c;是否属于a~ z或A~ Z或0~9。 isdigit() 判断一个字符是否是十进制数字字符。十进制数字是&#xff1a;0 1 2 3 4 5 6 7 8 9 isalnum()和isdig…...

攀登者1 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下…...

通信原理期末复习——基础小题汇总(二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…...

代码随想录刷题第四十二天| 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

代码随想录刷题第四十二天 今天是0-1背包问题&#xff0c;掌握了套路就不难了~~~ 0-1背包问题理论基础&#xff08;二维数组篇&#xff09;卡码网第46题 题目思路&#xff1a; 代码实现&#xff1a; input_line input() # 读取一行输入 mn input_line.split() m, n int…...

前端开发加速器:十个VSCode插件精选

前端开发是一个不断发展的领域&#xff0c;随着技术的进步&#xff0c;工具也在不断更新。Visual Studio Code&#xff08;VSCode&#xff09;是前端开发者广泛使用的编辑器之一&#xff0c;得益于其强大的插件系统&#xff0c;可以帮助开发者提升工作效率。以下是十个对于前端…...

剑指offer面试题3 二维数组中的查找

考察点&#xff1a; 考察数据结构二维数组知识点&#xff1a; 1.java中的数据类型分为基本类型和引用类型&#xff0c;数组属于引用类型&#xff0c;引用类型的变量中存储的是地址&#xff0c;该地址指向内存中的某个对象&#xff0c;参考c中的指针。2.一维数组定义&#xff0c…...

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现 更新时间&#xff1a;2023-12-29 1 题目 赛题 B DNA 存储中的序列聚类与比对 近年来&#xff0c;随着新互联网设备的大量涌入和对其服务需求的指数级增长&#xff0c;越来越多的数据信息被产…...

力扣383.赎金信 -- 哈希表

思路&#xff1a;记录magazine每个字符个数&#xff0c;然后记录ransomNote每个字符&#xff08;每有一个减1&#xff09;&#xff0c;假如出现<0的情况说明ransomnode有字符的个数超过了magazine则无法构成&#xff0c;否则可以构成 代码&#xff1a; class Solution { pu…...

GeoServer发布地图服务(WMS、WFS)

文章目录 1. 概述2. 矢量数据源3. 栅格数据源 1. 概述 我们知道将GIS数据大致分成矢量数据和栅格数据&#xff08;地形和三维模型都是兼具矢量和栅格数据的特性&#xff09;。但是如果用来Web环境中&#xff0c;那么使用图片这个栅格形式的数据载体无疑是最为方便的&#xff0…...

C语言——结构体

一、结构体的创建 1、定义 在 C 语言中&#xff0c;结构体是一种自定义的数据类型&#xff0c;它允许将不同类型的数据项组合成一个单一实体。这在组织复杂数据时非常有用&#xff0c;因为它可以将有逻辑关系的数据组合在一起。结构体是一些值的集合&#xff0c;这些值是结构…...

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Buffer的创建和销毁、扩容、写入数据

TcpConnection:封装的就是建立连接之后得到的用于通信的文件描述符&#xff0c;然后基于这个文件描述符&#xff0c;在发送数据的时候&#xff0c;需要把数据先写入到一块内存里边&#xff0c;然后再把这块内存里边的数据发送给客户端&#xff0c;除了发送数据&#xff0c;剩下…...

【Linux】常用的基本命令指令①

前言&#xff1a;从今天开始&#xff0c;我们逐步的学习Linux中的内容&#xff0c;和一些网络的基本概念&#xff0c;各位一起努力呐&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &#x1f4af;代码…...

活动运营常用的ChatGPT通用提示词模板

活动目标确定&#xff1a;如何明确活动的目标&#xff0c;确保活动策划与执行的方向性&#xff1f; 活动主题选择&#xff1a;如何选择吸引人的活动主题&#xff0c;提高用户的参与度和兴趣&#xff1f; 活动形式策划&#xff1a;如何根据活动目标和主题&#xff0c;选择适合…...

SpringBoot 中实现订单30分钟自动取消的策略

简介 在电商和其他涉及到在线支付的应用中&#xff0c;通常需要实现一个功能&#xff1a;如果用户在生成订单后的一定时间内未完成支付&#xff0c;系统将自动取消该订单。 本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案&#xff0c;并提供实例…...

像专家一样使用TypeScript映射类型

掌握TypeScript的映射类型&#xff0c;了解TypeScript内置的实用类型是如何工作的。 您是否使用过Partial、Required、Readonly和Pick实用程序类型? 你知道他们内部是怎么运作的吗? 如果您想彻底掌握它们并创建自己的实用程序类型&#xff0c;那么不要错过本文所涵盖的内容。…...

Golang 结构体

前言 在 Go 语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种自定义的数据类型&#xff0c;将多个不同类型的字段&#xff08;fields&#xff09;组合在一起 结构体通常用于模拟真实世界对象的属性和行为 定义结构体 可以使用 type 关键字和 struct 关键字来定…...

服务器运行状况监控工具

服务器运行状况监视提供了每个服务器状态和性能的广泛概述&#xff0c;通过监控服务器指标&#xff0c;如 CPU 使用率、内存消耗、I/O、磁盘使用率、进程等&#xff0c;服务器运行状况监控可以避免服务器停机。 服务器性能监控指标 服务器是网络中最重要的组件之一&#xff0…...

2022年全国职业院校技能大赛软件测试赛题卷②—自动化测试解析报告(含术语)

2022年全国职业院校技能大赛软件测试任务四 自动化测试 目录 第一题:按照以下步骤在PyCharm中进行自动化测试脚本编写,并执行脚本。...

497 蓝桥杯 成绩分析 简单

497 蓝桥杯 成绩分析 简单 //C风格解法1&#xff0c;*max_element&#xff08;&#xff09;与*min_element&#xff08;&#xff09;求最值 //时间复杂度O(n)&#xff0c;通过率100% #include <bits/stdc.h> using namespace std;using ll long long; const int N 1e4 …...

温州品牌网站设计/外贸平台app

1. 背景介绍本文基于快递包裹取件(用户获取包裹并将包裹信息存储数据库)和包裹入库(快递员将包裹放入收发室并将包裹信息存储如数据库)场景&#xff0c;并将包裹入库信息和取件信息分别存入不同的数据库。这样当用户取件时&#xff0c;需要更新两个表信息(入库表中的包裹状态和…...

网站流量到底怎样赚钱的/做seo要投入什么

C语言提供了scanf函数&#xff0c;用于给程序输入数据。用户可以通过键盘&#xff0c;给指定的变量输入数据。printf函数是给终端输出数据&#xff0c;scanf函数是从终端接收&#xff08;获取&#xff09;用户的输入数据。 scanf函数的格式如下&#xff1a; int scanf (const…...

商丘做网站用什么程序/什么是优化师

由于学习的起步较晚&#xff0c;创建项目的时候一直采用的都是较新的springboot&#xff0c;用的2.0.2.RELEASE版本。参照网上的示例进行实验的时候&#xff0c;有时候会才坑&#xff0c;特记录一二以备忘 首先就是SpringBoot和Cloud之间的版本关系。 由于网上的引入feign的时候…...

保亭交通工程建设局网站/网站关键词排名seo

背景&#xff1a; mac跑docker的spalsh遇到的错误&#xff0c;开始我以为时mac休眠的问题(远程链接的)&#xff0c;后面看了docker日志&#xff0c;发现并不是这样. 解决办法&#xff1a;将lua里面的在这里&#xff1a; splash.images_enabled false # 改为true附上GitHub is…...

网站建设优惠活动/百度快速收录入口

目录 【知识回顾】 【真题】 第一问:有符号数的算术右移 第二问:流水线用时...

wordpress嵌入视频/搜索引擎营销名词解释

DBMS_Job包的用法 包含以下子过程&#xff1a; Broken()过程。 change()过程。 Interval()过程。 Isubmit()过程。 Next_Date()过程。 Remove()过程。 Run()过程。 Submit()过程。 User_Export()过程。 What()过程。 1、 Broken()过程更新一个已提交的工作的…...