Spring-di基本使用

embedded/2024/9/23 10:30:28/

SpringDI

1 基础环境准备

       

流程如下

1.在自己的工程中建一个module用于SpringDi注入
2.导入spring相关的依赖
<dependencies><!--导入spring-context依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.12</version></dependency><!--导入测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--导入日志框架--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j2-impl</artifactId><version>2.23.1</version></dependency></dependencies>
3.创建spring的配置文件
1)log4j2配置文件

在resources中的文件夹中创建log4j2.xml文件。文件中的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><!--配置控制台输出日志--><Console name="Console" target="SYSTEM_OUT"><!--日志的输出格式--><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><!--配置文件输出日志--><File name="File" fileName="d:logs/app.log"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></File></Appenders><Loggers><!--日志级别为debug--><Root level="debug"><AppenderRef ref="Console"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>
2)SpringConfig.xml

在resourse文件夹下,创建SpringConfig.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"></beans>
4.准备实体类
 1)User实体类

        

package org.xiji.enty;public class User {private String username;private String password;public User(String username, String password) {this.username = username;this.password = password;}public User() {}public String getUsername() {return username;} public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

2)Teacher实体类

package org.xiji.enty;import java.util.List;
import java.util.Map;public class Teacher {private String teacherName;private User user;private List<User> listUser;private Map<String, User> mapUser;public Teacher(String teacherName, User user, List<User> listUser, Map<String, User> mapUser) {this.teacherName = teacherName;this.user = user;this.listUser = listUser;this.mapUser = mapUser;}public Teacher() {}public String getTeacherName() {return teacherName;}public void setTeacherName(String teacherName) {this.teacherName = teacherName;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<User> getListUser() {return listUser;}public void setListUser(List<User> listUser) {this.listUser = listUser;}public Map<String, User> getMapUser() {return mapUser;}public void setMapUser(Map<String, User> mapUser) {this.mapUser = mapUser;}
}

2 SpringDi注入

1.普通属性注入

        set注入        

                通过property的 name="属性名", value="属性值"

<!--set注入-->
<bean id="user" class="org.xiji.enty.User"> <property name="username" value="xiji"/><property name="password" value="123456"/>
</bean>

        构造注入

                通过contructor-arg name="属性名" ,value="属性值"

<!--构造注入-->
<bean id="user2" class="org.xiji.enty.User"><constructor-arg name="username" value="张三"/><constructor-arg name="password" value="123456"/>
</bean>

2.对象属性注入

        外部引入

                通过property name="属性名" ref="外部对象bean属性id"

        

<!--外部对象注入-->
<bean id="teacher" class="org.xiji.enty.Teacher"><property name="teacherName" value="张老师"/><property name="user" ref="user"/>
</bean>

        内部创建

                在property 标签内部创建bean

<!--内部对象注入-->
<bean id="teacher2" class="org.xiji.enty.Teacher"><property name="teacherName" value="小久"></property> <property name="user" ><bean id="user" class="org.xiji.enty.User"><property name="username"   value="小菊"></property><property name="password" value="123456"></property></bean></property>
</bean>

        外部引入级联赋值

                通过property ref="外部bean对象id" 在通过property中name="bean对象+属性"  和value=“赋值”

<!--外部对象注入+级联属性赋值-->
<bean id="teacher3" class="org.xiji.enty.Teacher"><property name="teacherName" value="惜己"></property><property name="user" ref="user2" ></property><property name="user.username" value="小明"></property><property name="user.password" value="123456"></property>
</bean>

3.List集合注入

        在property标签内部使用list标签,并且通过<ref bean=“外部beanid”>的方式引入bean

<!--list集合注入-->
<bean id="teacher4" class="org.xiji.enty.Teacher"><property name="teacherName" value="小光"></property><property name="listUser"><list><ref bean="user"></ref><ref bean="user2"></ref></list></property>
</bean>

4.Map集合注入

       通过property标签内部使用<map>标签,中的<entry>标签   Key(value) 和ref(引入外部对象)对map集合赋值

<!--mapper注入-->
<bean id="teacher5" class="org.xiji.enty.Teacher"><property name="teacherName" value="小明"></property> <property name="mapUser"><map><entry><key><value>xiji</value></key><ref bean="user"></ref></entry><entry><key><value>zs</value></key><ref bean="user2"></ref></entry></map></property>
</bean>

测试结果

5.通过util注入map和list

需要在头部标签导入

beans外部标签加入xmlns:util ="http://www.springframework.org/schema/util"

xsi:schemaLocation="
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd "
 

具体实现

<!--通过util导入list集合和map集合-->
<!--beans外部标签加入   xmlns:util ="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsd"
--><util:list id="mylist" ><ref bean="user" ></ref><ref bean="user2"></ref>
</util:list><util:map id="mymap"><entry><key><value>xiji</value></key><ref bean="user"></ref></entry><entry><key><value>zs</value></key><ref bean="user2"></ref></entry>
</util:map>
<bean id="teacher6" class="org.xiji.enty.Teacher"><property name="teacherName" value="外部测试"></property><property name="listUser" ref="mylist"></property><property name="mapUser" ref="mymap"></property>
</bean>

        


http://www.ppmy.cn/embedded/111016.html

相关文章

小程序的右侧抽屉开关动画手写效果

<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…

卷积神经网络与小型全连接网络在MNIST数据集上的对比

卷积神经网络&#xff08;CNN&#xff09; 深度卷积神经网络中&#xff0c;有如下特性 很多层&#xff08;Compositionality&#xff0c;组合性&#xff09;: 深度卷积神经网络通常由多层卷积和非线性激活函数组成。这种多层结构使得网络能够逐步提取和组合低层次的特征&…

【解决内存泄漏的问题】 Qt 框架中的父子对象关系会自动管理内存,父对象会在其销毁时自动销毁所有子对象。

修改前的代码 这段代码可能会出现内存泄漏问题&#xff0c;主要原因是构造函数中创建的 LoginDialog 和 RegisterDialog 对象未在合适的地方被正确释放。具体分析如下&#xff1a; 1. 构造函数中的问题 _login_dlg new LoginDialog(); setCentralWidget(_login_dlg); _login…

GO 反射

文章目录 基本概念与语法1. **获取类型和值**2. **反射修改值**3. **检查类型种类&#xff08;Kind&#xff09;** 反射的高级使用场景1. **结构体字段操作**2. **调用函数**3. **动态创建和修改切片、映射**4. **JSON 序列化/反序列化**5. **类型安全的通用函数**6. **动态生成…

开源的 Kafka 管理平台

来源&#xff1a;github.com/provectus/kafka-ui Apache Kafka UI 是一个免费的开源 Web UI&#xff0c;用于监控和管理 Apache Kafka 集群&#xff0c;可方便地查看 Kafka Brokers、Topics、消息、Consumer 等情况&#xff0c;支持多集群管理、性能监控、访问控制等功能。 1 …

Python实现群智能算法

博客目录 引言 什么是群智能算法&#xff1f;群智能算法的应用场景群智能算法的基本思想 群智能算法的原理 粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;人工蜂群算法&#xff08;Artificial Bee Colony, ABC&#xff09;萤火虫算法&#xff08;Firef…

Oracle同义词

默认只能访问自己用户下面的对象&#xff0c;所以可以创建同义词。 同义词(Synonym) 是数据库对象的一个别名&#xff0c;Oracle 可以为表、视图、序列、过程、函数、程序包等指定一个别名 https://blog.csdn.net/ChineseSoftware/article/details/121750937

11.5.软件系统分析与设计-面向对象的程序设计与实现

面向对象的程序设计与实现 设计模式 Java代码 C代码