基于XML管理bean
实验七 给bean的属性赋值:级联属性赋值
实验八 给bean的属性赋值:构造器注入
实验九 给bean的属性赋值:特殊值处理
实验十 给bean的属性赋值:使用p名称空间
实验七 给bean的属性赋值:级联属性赋值
1、配置关联对象的 bean
2、装配关联对象并赋值级联属性
3、测试
实验七 给bean的属性赋值:级联属性赋值
1、配置关联对象的 bean
2、装配关联对象并赋值级联属性
关联对象:happyMachine
级联属性:happyMachine.machineName
<!-- 装配关联对象 -->
<property name="happyMachine" ref="happyMachine2"/>
<!-- 对HappyComponent来说,happyMachine的machineName属性就是级联属性 -->
<property name="happyMachine.machineName" value="cascadeValue"/>
3、测试
@Test
public void testExperiment07() {
HappyComponent happyComponent6 = (HappyComponent) iocContainer.getBean("happyComponent6");
String machineName = happyComponent6.getHappyMachine().getMachineName();
System.out.println("machineName = " + machineName);
}
实验八 给bean的属性赋值:构造器注入
1、声明组件类
2、配置
3、测试
4、补充
实验八 给bean的属性赋值:构造器注入
1、声明组件类
package com.atguigu.ioc.component;
public class HappyTeam {
private String teamName;
private Integer memberCount;
private Double memberSalary;
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public Integer getMemberCount() {
return memberCount;
}
public void setMemberCount(Integer memberCount) {
this.memberCount = memberCount;
}
public Double getMemberSalary() {
return memberSalary;
}
public void setMemberSalary(Double memberSalary) {
this.memberSalary = memberSalary;
}
@Override
public String toString() {
return "HappyTeam{" +
"teamName='" + teamName + '\'' +
", memberCount=" + memberCount +
", memberSalary=" + memberSalary +
'}';
}
public HappyTeam(String teamName, Integer memberCount, Double memberSalary) {
this.teamName = teamName;
this.memberCount = memberCount;
this.memberSalary = memberSalary;
}
public HappyTeam() {
}
}
2、配置
<constructor-arg value="happyCorps"/>
<constructor-arg value="10"/>
<constructor-arg value="1000.55"/>
3、测试
@Test
public void testExperiment08() {
HappyTeam happyTeam = iocContainer.getBean(HappyTeam.class);
System.out.println("happyTeam = " + happyTeam);
}
4、补充
constructor-arg标签还有两个属性可以进一步描述构造器参数:
index属性:指定参数所在位置的索引(从0开始)
name属性:指定参数名
实验九 给bean的属性赋值:特殊值处理
1、声明一个类用于测试
2、字面量①用Java代码举例说明
②Spring配置文件中举例
[1]字面量举例
[2]类似变量举例
3、null值
4、XML实体
5、CDATA节
实验九 给bean的属性赋值:特殊值处理
1、声明一个类用于测试
package com.atguigu.ioc.component;
public class PropValue {
private String commonValue;
private String expression;
public String getCommonValue() {
return commonValue;
}
public void setCommonValue(String commonValue) {
this.commonValue = commonValue;
}
public String getExpression() {
return expression;
}
public void setExpression(String expression) {
this.expression = expression;
}
@Override
public String toString() {
return "PropValue{" +
"commonValue='" + commonValue + '\'' +
", expression='" + expression + '\'' +
'}';
}
public PropValue(String commonValue, String expression) {
this.commonValue = commonValue;
this.expression = expression;
}
public PropValue() {
}
}
2、字面量
①用Java代码举例说明
字面量是相对于变量来说的。看下面的代码:
int a = 10;
声明一个变量a,初始化为10,此时a就不代表字母a了,而是作为一个变量的名字。当我们引用a的时候,我们实际上拿到的值是10。
而如果a是带引号的:'a',那么它现在不是一个变量,它就是代表a这个字母本身,这就是字面量。所以字面量没有引申含义,就是我们看到的这个数据本身。
②Spring配置文件中举例
[1]字面量举例
[2]类似变量举例
3、null值
<property name="commonValue">
<!-- null标签:将一个属性值明确设置为null -->
<null/>
</property>
4、XML实体
<!-- 小于号在XML文档中用来定义标签的开始,不能随便使用 -->
<!-- 解决方案一:使用XML实体来代替 -->
<property name="expression" value="a < b"/>
5、CDATA节
<property name="expression">
<!-- 解决方案二:使用CDATA节 -->
<!-- CDATA中的C代表Character,是文本、字符的含义,CDATA就表示纯文本数据 -->
<!-- XML解析器看到CDATA节就知道这里是纯文本,就不会当作XML标签或属性来解析 -->
<!-- 所以CDATA节中写什么符号都随意 -->
<value><![CDATA[a < b]]></value>
</property>
实验十 给bean的属性赋值:使用p名称空间
1、配置
2、测试
实验十 给bean的属性赋值:使用p名称空间
1、配置
使用 p 名称空间的方式可以省略子标签 property,将组件属性的设置作为 bean 标签的属性来完成。
<bean id="happyMachine3"
class="com.atguigu.ioc.component.HappyMachine"
p:machineName="goodMachine"
/>
使用 p 名称空间需要导入相关的 XML 约束,在 IDEA 的协助下导入即可:
<?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:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
具体操作时,输入p:稍微等一下,等IDEA弹出下面的提示:
按Alt+Enter即可导入。
2、测试
@Test
public void testExperiment10() {
HappyMachine happyMachine3 = (HappyMachine) iocContainer.getBean("happyMachine3");
String machineName = happyMachine3.getMachineName();
System.out.println("machineName = " + machineName);
}