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>