Spring4.0学习笔记003——Bean的配置一(基于XML文件)
Posted yfyzwr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring4.0学习笔记003——Bean的配置一(基于XML文件)相关的知识,希望对你有一定的参考价值。
1. bean属性的注入方式
1-1. 属性注入
上一篇文章,以如下的XML文件来配置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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置bean -->
<bean id="HelloWorld" class="com.yfyzwr.spring.beans.HelloWorld">
<property name="name" value="World"></property>
</bean>
</beans>
属性注入即是通过setter方法来注入Bean的属性值或依赖的对象。属性注入使用< property >元素, 使用name属性来指定Bean的属性名称,value 属性或< value >子节点来指定属性值。
属性注入是实际应用中最常用的注入方式
1-2. 构造器注入
通过构造方法注入Bean的属性值或依赖的对象,它能保证Bean实例在实例化后就可以使用。
构造器注入在< constructor-arg >节点里声明属性, < constructor-arg >节点没有name属性,直接指定value。
<?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 -->
<bean id="HelloWorld" class="com.yfyzwr.spring.beans.HelloWorld">
<constructor-arg value="World" index="0" type="java.lang.String"></constructor-arg>
</bean>
</beans>
修改之后的XML配置文件使用的是构造器注入属性值的方式。
- value:为该属性指定的初始值。
- index:可选,指定该value将被赋予的属性的声明顺序(从0开始)。
- type:可选,指定该value将被赋予的属性的类型。
配置某个bean类时包含n个< constructor-arg >节点,就要求改bean类的实现类必须有带n个参数的构造器函数。
2. 引用其他bean
组成应用程序的Bean经常需要相互协作以完成应用程序的功能,要使Bean能够相互访问, 就必须在Bean配置文件中指定对Bean的引用。
在Bean的配置文件中, 可以通过< ref >子节点或ref属性为Bean的属性或构造器参数指定对Bean的引用。
新建Car类。
public class Car private String brand; private double price; public void setBrand(String brand) this.brand = brand; public void setPrice(double price) this.price = price; @Override public String toString() return "Car [brand=" + brand + ", price=" + price + "]";
新建Person类。
public class Person private String name; private int age; private Car car; public void setName(String name) this.name = name; public void setAge(int age) this.age = age; public void setCar(Car car) this.car = car; @Override public String toString() return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
设置bean配置文件。
<bean id="Car_id" class="com.yfyzwr.spring.beans.Car"> <property name="brand" value="红旗"></property> <property name="price" value="123456.78"></property> </bean> <bean id="Person" class="com.yfyzwr.spring.beans.Person"> <property name="name" value="金三胖"></property> <property name="age" value="30"></property> <property name="car" ref="Car_id"></property> </bean>
修改main方式的实现。
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Person person = (Person)context.getBean("Person"); System.out.println(person.toString());
从输出结果可以得知,Person实例包含对Car实例的引用关系。
3. 配置集合属性
修改Person类的实现
public class Person private String name; private int age; private List<Integer> scores; private List<Car> carsList; private Set<Car> carsSet; private Map<String, Car> carsMap; public void setName(String name) this.name = name; public void setAge(int age) this.age = age; public void setScores(List<Integer> scores) this.scores = scores; public void setCarsList(List<Car> carsList) this.carsList = carsList; public void setCarsSet(Set<Car> carsSet) this.carsSet = carsSet; public void setCarsMap(Map<String, Car> carsMap) this.carsMap = carsMap; @Override public String toString() return "Person [name=" + name + ", age=" + age + ", scores=" + scores + ", carsList=" + carsList + ", carsSet=" + carsSet + ", carsMap=" + carsMap + "]";
修改xml配置文件
<bean id="Person" class="com.yfyzwr.spring.beans.Person"> <property name="name" value="zhu"></property> <property name="age" value="21"></property> <!-- 配置List属性 --> <property name="scores"> <list> <value>100</value> <value>93</value> <value>97</value> </list> </property> <!-- 配置List属性 --> <property name="carsList"> <list> <ref bean="Car"/> <ref bean="Car"/> <ref bean="Car"/> </list> </property> <!-- 配置Set属性 --> <property name="carsSet"> <set> <ref bean="Car"/> <!-- Set没有重复元素,所以输出只要一个元素 --> <ref bean="Car"/> <ref bean="Car"/> </set> </property> <!-- 配置Map属性 --> <property name="carsMap"> <map> <entry key="son1" value-ref="Car"></entry> <entry key="son2" value-ref="Car"></entry> <entry key="son3" value-ref="Car"></entry> </map> </property> </bean>
运行程序,查看输出结果。
4. 使用P命名空间简化配置
- 在xml配置文件,点击右键,选择【Open With】->【Spring Config Editor】按钮,会出现下图所示的tab标签。
选择NameSpaces标签,勾选上其中的P命名空间,此时在xml配置文件中会多出如下语句。
xmlns:p="http://www.springframework.org/schema/p"
上述的配置信息就可以改下为简化的形式。
<bean id="Car_id" class="com.yfyzwr.spring.beans.Car" p:brand="红旗" p:price="123456.78"></bean> <bean id="Person" class="com.yfyzwr.spring.beans.Person" p:name="金三胖" p:age="30" p:car-ref="Car_id"></bean>
运行的结果与前述的一致。
以上是关于Spring4.0学习笔记003——Bean的配置一(基于XML文件)的主要内容,如果未能解决你的问题,请参考以下文章
Spring4.0学习笔记005——Bean的配置三(基于XML文件)
Spring4.0学习笔记005——Bean的配置三(基于XML文件)
Spring4.0学习笔记006——Bean的配置(基于注解)
Spring4.0学习笔记006——Bean的配置(基于注解)