Spring 配置属性细节

版权声明:博客知识产权来源命运的信徒,切勿侵权 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>

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/85100312