版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/85100312
Spring的配置文件的属性有很多,下面我们开始逐个了解练习一下
前提:
两个属性类
package cn.com.day02;
public class Phone {
private String pname;
private double price;
public void setPname(String pname) {
this.pname = pname;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Phone [pname=" + pname + ", price=" + price + "]";
}
}
package cn.com.day02;
public class People {
private String name;
private int age;
private Phone p;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setP(Phone p) {
this.p = p;
}
@Override
public String toString() {
return "People [name=" + name + ", age=" + age + ", p=" + p + "]";
}
}
测试类
package cn.com.day02;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
//1.获取IOC容器
ApplicationContext cox=new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取bean;
Phone phone=(Phone) cox.getBean("phone");
//3.返回结果
System.out.println(phone);
}
}
1.vlaue可以作为属性也可以是独立的子节点
配置文件的内容
<!-- value子节点 -->
<bean id="phone" class="cn.com.day02.Phone">
<property name="pname" value="huawei"></property>
<property name="price" >
<value>2100</value>
</property>
</bean>
2.含有特殊的符号的值
例如<property name="pname" value="huawei<1203>"></property>,含有<>是配置文件特有的,如果属性中含有这个<>的话,整个配置文件就会报错
那么怎么处理呢?
用<![CDATA[]]>
<property name="pname">
<value>
<![CDATA[huawei<1203>]]>
</value>
</property>
3.复合属性的怎么赋值,如people类里面有phone属性
1.使用ref,外部引用的
2.使用内部bean 注意内部bean只能被这个包含的类调用,不能被其他的调用
<!-- 复合属性的赋值 -->
<bean id="people" class="cn.com.day02.People">
<property name="age" value="21"></property>
<property name="name" value="tjn"></property>
<!--1.1 使用ref属性 -->
<!-- <property name="p" ref="phone"></property> -->
<!-- 1.2或者使用 内部bean的方法-->
<property name="p">
<bean class="cn.com.day02.Phone">
<property name="pname" value="xiaomi"></property>
<property name="price" value="4500"></property>
</bean>
</property>
</bean>
4、如果不给这个car属性赋值,设置为null,怎么处理?
<property name="p">
<!-- 不给car赋值 -->
<null/>
</property>
5、级联属性赋值(一定要先初始化级联的对象,才能给属性赋值)
<!-- 级联属性赋值 -->
<bean id="people1" class="cn.com.day02.People">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="p" ref="phone"></property>
<property name="p.pname" value="hongmi"></property>
<property name="p.price" value="123"></property>
</bean>
注意p属性要有get方法
6、使用集合属性,list集合和map集合
第一步,把people类里面的phone改成集合属性
也可以重新新建NewPeople.java
package cn.com.day02;
import java.util.List;
public class NewPeople {
private String name;
private int age;
private List<Phone> p;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setP(List<Phone> p) {
this.p = p;
}
public List<Phone> getP() {
return p;
}
@Override
public String toString() {
return "NewPeople [name=" + name + ", age=" + age + ", p=" + p + "]";
}
}
配置文件如下
<!--集合属性 -->
<bean id="newPeople" class="cn.com.day02.NewPeople">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="p">
<list>
<ref bean="phone"/>
<ref bean="phone1"/>
</list>
</property>
map集合
把phone改成map集合的形式
package cn.com.day02;
import java.util.List;
import java.util.Map;
public class NewPeople {
private String name;
private int age;
private List<Phone> p;
private Map<String, Phone> pp;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Phone> getP() {
return p;
}
public void setP(List<Phone> p) {
this.p = p;
}
public void setPp(Map<String, Phone> pp) {
this.pp = pp;
}
public Map<String, Phone> getPp() {
return pp;
}
@Override
public String toString() {
return "NewPeople [name=" + name + ", age=" + age + ", pp=" + pp + "]";
}
}
配置信息如下
<!-- map集合属性 -->
<bean id="newPeople1" class="cn.com.day02.NewPeople">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="pp">
<map>
<entry key="AA" value-ref="phone"></entry>
<entry key="SS" value-ref="phone1">
</entry>
</map>
</property>
</bean>
properties属性
在NewPeople中添加 private Properties ps; 增加set和get方法
<!-- properties属性 -->
<bean id="newPeople2" class="cn.com.day02.NewPeople">
<property name="age" value="3"></property>
<property name="name" value="tzj"></property>
<property name="ps">
<props>
<prop key="user">root</prop>
<prop key="pass">123456</prop>
</props>
</property>
</bean>
配置独立的bean
<!--配置独立的bean集合 -->
<util:list id="phones">
<ref bean="phone" />
<ref bean="phone1" />
</util:list>
<!--list集合属性 -->
<bean id="newPeople" class="cn.com.day02.NewPeople">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="p" ref="phones">
<!-- <list> <ref bean="phone" /> <ref bean="phone1" /> </list> -->
</property>
</bean>
p空间
<!-- p空间 -->
<bean id="newPeople3" class="cn.com.day02.NewPeople" p:age="121" p:name="oyr" p:p-ref="phone"></bean>
最后奉上这些知识点的配置文件
<?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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<!-- class就是Spring要替换的对象的全路径,id就是类名(第一个字母小写) -->
<!-- <bean id="helloWorld" class="cn.com.day01.HelloWorld"> name是setName的set+名称,这个名称的第一个字母小写
<property name="name" value="Spring"></property> </bean> -->
<!--配置独立的bean集合 -->
<util:list id="phones">
<ref bean="phone" />
<ref bean="phone1" />
</util:list>
<bean id="car" class="cn.com.day01.Car">
<!-- 通过属性注入的方式 -->
<!-- <property name="name" value="Spring"></property> <property name="price"
value="90" ></property> <property name="speed" value="100" ></property> -->
<!-- 通过构造函数注入 -->
<!-- <constructor-arg name="name" value="aodi" ></constructor-arg> <constructor-arg
name="price" value="9000"></constructor-arg> <constructor-arg name="speed"
value="120"></constructor-arg> -->
<!-- 对于重载的构造器怎么办呢?通过类型和顺序,二者可以混搭 -->
<constructor-arg name="name" value="aodi" index="0"
type="java.lang.String"></constructor-arg>
<constructor-arg name="price" value="9000" type="double"></constructor-arg>
</bean>
<!-- value子节点 -->
<bean id="phone" class="cn.com.day02.Phone">
<property name="pname">
<value>
<![CDATA[huawei<1203>]]>
</value>
</property>
<property name="price">
<value>2100</value>
</property>
</bean>
<bean id="phone1" class="cn.com.day02.Phone">
<property name="pname">
<value>
xiaomi
</value>
</property>
<property name="price">
<value>1500</value>
</property>
</bean>
<!-- 复合属性的赋值 -->
<bean id="people" class="cn.com.day02.People">
<property name="age" value="21"></property>
<property name="name" value="tjn"></property>
<!--1.1 使用ref属性 -->
<!-- <property name="p" ref="phone"></property> -->
<!-- 1.2或者使用 内部bean的方法 -->
<property name="p">
<!-- <bean class="cn.com.day02.Phone"> <property name="pname" value="xiaomi"></property>
<property name="price" value="4500"></property> </bean> -->
<!-- 不给car赋值 -->
<null />
</property>
</bean>
<!-- 级联属性赋值 -->
<bean id="people1" class="cn.com.day02.People">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="p" ref="phone"></property>
<property name="p.pname" value="hongmi"></property>
<property name="p.price" value="123"></property>
</bean>
<!--list集合属性 -->
<bean id="newPeople" class="cn.com.day02.NewPeople">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="p" ref="phones">
<!-- <list> <ref bean="phone" /> <ref bean="phone1" /> </list> -->
</property>
</bean>
<!-- map集合属性 -->
<bean id="newPeople1" class="cn.com.day02.NewPeople">
<property name="age" value="1"></property>
<property name="name" value="czj"></property>
<property name="pp">
<map>
<entry key="AA" value-ref="phone"></entry>
<entry key="SS" value-ref="phone1">
</entry>
</map>
</property>
</bean>
<!-- properties属性 -->
<bean id="newPeople2" class="cn.com.day02.NewPeople">
<property name="age" value="3"></property>
<property name="name" value="tzj"></property>
<property name="ps">
<props>
<prop key="user">root</prop>
<prop key="pass">123456</prop>
</props>
</property>
</bean>
<!-- p空间 -->
<bean id="newPeople3" class="cn.com.day02.NewPeople" p:age="121" p:name="oyr" p:p-ref="phone"></bean>
</beans>