Spring——Bean管理-xml方式进行属性注入
目录
一、xml方式创建对象
二、xml方式注入属性
第①种方式注入:set方法注入
第②种方式注入:有参构造函数注入
constructor-arg:通过构造函数注入
用name标签属性: 不按照顺序也会自动匹配
使用index标签属性:index的值为参数的顺序,默认从0开始
使用type标签属性:要和参数数据类型严格一致
三、xml注入其他类型属性
1、字面量--null值
2、含有特殊符号
3、注入属性-外部bean
4、注入属性-内部bean
什么是内部bean?
什么时候使用内部bean?
如何使用内部bean?
5、注入集合属性——数组、List集合、Map集合、Set集合
抽取公共部分
Spring系列文章
一、xml方式创建对象
<!-- 配置User对象创建-->
<!-- id是取得别名,通过id别名可以把类找到-->
<bean id="user" class="com.atguigu.spring5.User"></bean>
- id:唯一标识,不能加特殊符号
- class:类全路经(包类路径)
- name:可以加特殊符号
二、xml方式注入属性
DI:依赖注入,就是注入属性
第①种方式注入:set方法注入
package com.atguigu.spring5.Book;public class Book {private String bname;private String bauthor;public void setBname(String bname){this.bname=bname;}public void setBauthor(String bauthor){this.bauthor=bauthor;}public static void main(String[] args) {Book book = new Book();book.setBname("abc");}public void testDemo(){System.out.println(bname+"---"+bauthor);}
}
<?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"><!-- 2.set方法注入属性--><bean id="book" class="com.atguigu.spring5.Book.Book">
<!-- 使用propterty完成属性注入-->
<!-- name:类里面属性名称-->
<!-- value:向属性注入的值--><property name="bname" value="追风筝的人"></property><property name="bauthor" value="卡勒德·胡赛尼"></property></bean>
</beans>
package com.atguigu.spring5.Book;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class BoolTestMain {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Booktest.xml");Book book = context.getBean("book", Book.class);System.out.println(book);book.testDemo();}
}
我们还可以通过另一种方式简化写法—p名称空间注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="books" class="com.atguigu.spring5.Book.Book" p:bname="朝花夕拾" p:bauthor="鲁迅"></bean></beans>
第②种方式注入:有参构造函数注入
public class Orders {// 有参数构造注入属性private String oname;private String address;private double money;public Orders(String oname, String address, double money) {this.oname = oname;this.address = address;this.money = money;}public void show() {System.out.println(oname + "---" + address + "---" + money);}
}
constructor-arg:通过构造函数注入
使用value标签属性: 默认按照constructor-arg标签的顺序
<constructor-arg value="电脑"></constructor-arg>
<constructor-arg value="China"></constructor-arg>
用name标签属性: 不按照顺序也会自动匹配
<constructor-arg name="oname" value="电脑"></constructor-arg>
<constructor-arg name="address" value="China"></constructor-arg>
使用index标签属性:index的值为参数的顺序,默认从0开始
<!--index="0":有参构造的第一个属性-->
<constructor-arg index="0" value="电脑"></constructor-arg>
<constructor-arg index="1" value="China"></constructor-arg>
使用type标签属性:要和参数数据类型严格一致
(如果数据类型一致,按照constructor-arg标签的顺序匹配)
<constructor-arg type="double" value="23"></constructor-arg>
<constructor-arg type="java.lang.String" value="电脑"></constructor-arg>
<constructor-arg type="java.lang.String" value="China"></constructor-arg>
三、xml注入其他类型属性
1、字面量--null值
<constructor-arg name="oname" value="朝花夕拾"/>
<constructor-arg name="oauthor" value="鲁迅"/>
<constructor-arg name="address" ><null></null>
</constructor-arg>
2、含有特殊符号
- <;>;
- 把带特殊符号内容写到!CDATA
<!-- 1、使用<>先进行转义-->
<property name="bauthor" value="鲁迅"></property>
<property name="bname" value="<>朝花夕拾>>"></property><!-- 2、使用!CDATA-->
<property name="bauthor"><value><![CDATA[<<南京>>]]></value>
</property>
3、注入属性-外部bean
通过ref属性将进行注入
public class School {//创建School类型属性,生成set方法private Teacher teacher;public void setTeacher(Teacher teacher) {this.teacher = teacher;}
}
<!-- 注入外部bean-->
<bean id="school" class="com.atguigu.spring5.propertyTest.School"><property name="teacher" ref="teachers"></property>
</bean><bean id="teachers" class="com.atguigu.spring5.propertyTest.Teacher"></bean>
4、注入属性-内部bean
什么是内部bean?
在某一个bean中定义另一个bean作为属性
什么时候使用内部bean?
如果School类中的某个属性的数据类型是另一个类Book,则可以把这个类Book定义在属性的内部
如何使用内部bean?
public class School {//创建School类型属性,生成set方法private Teacher teacher;public void setTeacher(Teacher teacher) {this.teacher = teacher;}//部门private Book dept;public void setDept(Book dept) {this.dept = dept;}
}
public class Book {private String bname;private String bauthor;public void setBname(String bname) {this.bname = bname;}
}
<!-- 注入内部bean-->
<bean id="school" class="com.atguigu.spring5.propertyTest.School"><property name="teacher" ref="teachers"></property><property name="dept" ><bean id="book" class="com.atguigu.spring5.Book.Book"><property name="bname" value="朝花夕拾"></property></bean></property>
</bean>
5、注入集合属性——数组、List集合、Map集合、Set集合
package com.atguigu.spring5.CollectionTypeTest;import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;/*** @BelongsProject: 02-Spring* @BelongsPackage: com.atguigu.spring5.CollectionTypeTest* @Author: dengLiMei* @CreateTime: 2023-02-09 09:46* @Description: TODO* @Version: 1.0*/
public class Student {//数组private String[] courses;// List集合private List<String> lists;//Map集合private Map<String, String> maps;//Set集合private Set<String> sets;public void setSets(Set<String> sets) {this.sets = sets;}public Student() {}public void setCourses(String[] courses) {this.courses = courses;}public void setLists(List<String> lists) {this.lists = lists;}public void setMaps(Map<String, String> maps) {this.maps = maps;}public void show() {System.out.println(Arrays.toString(courses));System.out.println((lists));System.out.println((maps));System.out.println((sets));}
}
<?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"><bean id="students" class="com.atguigu.spring5.CollectionTypeTest.Student"><!-- 数组--><property name="courses"><array><value>spring5</value><value>springboot</value></array></property><!-- List类型--><property name="lists"><list><value>springcloud</value><value>springcloudAlibaba</value></list></property><!-- Map集合--><property name="maps"><map><entry key="QQ" value="腾讯"></entry><entry key="淘宝" value="阿里"></entry></map></property><!-- Set集合--><property name="sets"><set><value>set-spring5</value><value>set-springboot</value></set></property></bean>
</beans>
输出结果:
如果一个类中包含了另一个类的实体对象,可以这样写
public class Course {// 课程名称private String cname;public void setCname(String cname) {this.cname = cname;}
}
package com.atguigu.spring5.CollectionTypeTest;import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;public class Student2 {//实体对象-学生有多门课程private List<Course> courseList;public void setCourseList(List<Course> courseList) {this.courseList = courseList;}@Overridepublic String toString() {return "Student2{" +"courseList=" + courseList +'}';}
}
<bean id="student2" class="com.atguigu.spring5.CollectionTypeTest.Student2"><property name="courseList"><list><ref bean="course1"></ref><ref bean="course2"></ref></list></property></bean><!-- 创建多个course对象-->
<bean id="course1" class="com.atguigu.spring5.CollectionTypeTest.Course"><property name="cname" value="spring5框架"></property>
</bean>
<bean id="course2" class="com.atguigu.spring5.CollectionTypeTest.Course"><property name="cname" value="MyBatis框架"></property>
</bean>
public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("CollectionTypeBeans.xml");Student2 students1 = context.getBean("student2", Student2.class);students1.show();
}
输出结果:
目前的问题:只能当前类使用,其他类不能用,接下来就是把集合属性抽取成公共部分让所有实体类都能够引入
抽取公共部分
public class Book {private List<String> list;public void setList(List<String> list) {this.list = list;}public void show(){System.out.println(list);}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!-- 1、提取list集合类型属性注入--><util:list id="bookList"><value>spring5</value><value>springboot</value><value>springcloud</value></util:list><!-- 2、提取list集合类型属性注入使用--><bean id="book" class="com.atguigu.spring5.CollectionTypeTest.Book"><property name="list" ref="bookList"></property></bean>
</beans>
public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("CollectionTypeBeans.xml");Book book = context.getBean("book", Book.class);book.show();
}
输出结果:
Spring系列文章:
Spring——是什么?作用?内容?用到的设计模式?
Spring——Bean管理-xml方式进行属性注入
Spring——Bean管理-注解方式进行属性注入
Spring——什么是IOC?
Spring——AOP是什么?如何使用?
Spring——什么是事务?传播行为?事务隔离级别有哪些?
Spring——整合junit4、junit5使用方法
如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏脚印支持一下博主~
Spring——Bean管理-xml方式进行属性注入相关推荐
- IOC操作Bean管理XML方式(注入集合类型属性)
目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 (4)编写一个测试类进行 ...
- IOC操作Bean管理XML方式(有参构造注入属性)
IOC操作Bean管理XML方式 目录 有参构造注入属性 (1)步骤(创建类,定义属性,创建属性对应的有参构造方法): (2)步骤:在Spring 的xml配置文件中进行配置 (3)步骤:进行测试 结 ...
- IOC操作Bean管理XML方式(外部属性文件)
目录 IOC操作Bean管理XML方式(外部属性文件) 前情引入: 实验演示: 1.直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池jar包 (3)创建一个bean6.xml配置文件 ...
- IOC操作Bean管理XML方式(注入空值和特殊符号)
IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号: 方法 ...
- IOC操作Bean管理XML方式(xml自动装配)
目录 IOC操作Bean管理XML方式(xml自动装配) 一.演示自动装配过程 (1)根据 属性名称 装配 步骤一: 步骤二: 步骤三: (2)根据 属性类型 装配 (2.1)根据 类型 自动装配产生 ...
- IOC操作Bean管理XML方式(bean 的生命周期)
目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...
- IOC操作Bean管理XML方式(bean的作用域)
目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scop ...
- Spring框架中XML配置特殊属性注入
Spring框架中XML配置特殊属性注入 前言 创建测试类 其他类型属性 前言 Spring框架中,在通过set方式进行属性注入时,可能会遇到某些特殊字符的注入,例如:null和某些标签字符" ...
- IOC操作Bean管理XML方式(FactoryBean)
目录 IOC操作Bean管理XML方式(FactoryBean) Spring 有两种类型的bean 第一种:是普通的 bean 第二种:工厂bean FactoryBean 第一步:创建类,让这个类 ...
最新文章
- 火爆GitHub的《机器学习100天》,有人把它翻译成了中文版
- Linux的前世今生
- SAP CDS view redirect(重定向)的调试
- Linux修改密码后不能SSH远程登录了
- CodeForces - 976F Minimal k-covering
- 如何实现对象的深copy?
- android webview js 失效,Android WebView注入JQuery、JS脚本及执行无效的问题解决
- 《Python Cookbook 3rd》笔记(5.3):使用其他分隔符或行终止符打印
- 【Git】Git修改Repository语言类型
- 漫话:如何给女朋友解释什么是3PC?
- Android6.0内核移植(1):分析编译日志
- Matlab 警告: 名称不存在或不是目录
- H3CSE园区-STP
- 波兰表达式 逆波兰表达式
- matlab拟合反比例函数,y与x的函数关系式图像 已知变量y与x之间的函数
- java 人民币转换,java人民币大小写转换方法
- [NIPS 2018] Delta Encoder: An Effective Sample Synthesis Method for Few Shot Object Recognition
- Vue学习----第三天_webpack(学习webpack看这一篇就够了1.8w字)【6.7】
- 计算机系统概论基本知识
- 小小白的Android入门之计算器学习