您的位置:首页 > 编程语言 > Java开发

03-spring学习-属性配置细节

2017-11-19 16:46 387 查看

配置bean的一些细节

字面值



如果包含特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来。

比如这里的配置属性里面的value值包含<>等特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来。

<bean id="car2" class="com.spring.beans.Car" >
<constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg index="1" type="java.lang.String">
<value><![CDATA[<shanghai^>]]></value>
</constructor-arg>
<constructor-arg  type="double">
<value>250</value>
</constructor-arg>
</bean>


引用其他bean



可以使用<ref>元素或者property的ref属性,建立bean之间的引用关系

比如这里有个person类,里面有个属性是Car类。在配置bean的时候,需要给car属性赋值,这时候可以使用ref属性。

person类:

package com.spring.beans;

public class Person {

private String name;
private int age;

private Car car;

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 Car getCar() {
return car;
}

public void setCar(Car car) {
this.car = car;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}

}


配置:可以使用property的ref属性,建立bean之间的引用关系

<!-- 如果包含特殊符号,直接写会报错。可以用这个<![CDATA[]]>包裹起来 -->
<bean id="car2" class="com.spring.beans.Car" >
<constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg index="1" type="java.lang.String">
<value><![CDATA[<shanghai^>]]></value>
</constructor-arg>
<constructor-arg  type="double">
<value>250</value>
</constructor-arg>
</bean>

<bean id="person" class="com.spring.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<!-- 可以使用property的ref属性,建立bean之间的引用关系 -->
<property name="car" ref="car2"></property>
</bean>


或者使用<ref>元素配置:

<bean id="person" class="com.spring.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<!-- 可以使用property的ref属性,建立bean之间的引用关系 -->
<!-- <property name="car" ref="car2"></property>  -->
<property name="car">
<ref bean="car2"></ref>
</property>
</bean>


使用这个person类。

Car car=(Car) ctx.getBean("car");
Car car2=(Car) ctx.getBean("car2");
System.out.println(car);
System.out.println(car2);

Person person=(Person) ctx.getBean("person");
System.out.println(person);


运行结果:



也可以在属性或者构造器中包含Bean的声明,这样的bean称为内部bean。

<bean id="person" class="com.spring.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<property name="car">
<bean class="com.spring.beans.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="changan"></constructor-arg>
<constructor-arg value="200" type="double"></constructor-arg>
</bean>
</property>
</bean>




比如注入null值:



为级联属性赋值:



集合属性

使用list节点为list类型的属性赋值




这里拿<list>来做例子:

例如:

package com.spring.beans.collections;
import java.util.List;
import com.spring.beans.Car;

public class Person {

private String name;
private int age;

private List<Car> cars;

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<Car> getCars() {
return cars;
}

public void setCars(List<Car> cars) {
this.cars = cars;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
}
}


配置:

<!-- 测试集合属性 -->
<bean id="person3" class="com.spring.beans.collections.Person">
<property name="name" value="mike"></property>
<property name="age" value="27"></property>
    <!-- 使用list节点为list类型的属性赋值 -->
<property name="cars">
<list>
<ref bean="car"></ref>
<ref bean="car2"></ref>
</list>
</property>
</bean>


运行:



set集合的使用跟list集合差不多类似;

Map集合的使用如下:



新建一个newPerson类:

package com.spring.beans.collections;
import java.util.Map;
import com.spring.beans.Car;

public class NewPerson {

private String name;
private int age;
private Map<String,Car> cars;

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 Map<String,Car> getCars() {
return cars;
}

public void setCars(Map<String,Car> cars) {
this.cars = cars;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
}
}


配置:

<!-- 测试Map集合属性 -->
<bean id="person3" class="com.spring.beans.collections.NewPerson">
<property name="name" value="rose"></property>
<property name="age" value="28"></property>
<property name="cars">
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
</bean>


配置properties属性值

使用props 和 prop 为属性 properties 赋值

package com.spring.beans.collections;
import java.util.Properties;

public class DataSource {

private Properties properties;

public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}

@Override
public String toString() {
return "DataSource [properties=" + properties + "]";
}
}


配置:

<!-- 配置properties属性值 -->
<bean id="dataSource" class="com.spring.beans.collections.DataSource">
<!-- 使用props 和 prop 为属性 properties 赋值 -->
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">911581</prop>
<prop key="jdbcurl">jdbc:mysql:///sys</prop>
<prop key="driverClass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>


运行结果:



配置单例的集合bean

配置单例的集合bean,以供多个bean使用,需要导入util命名空间。

为了导入util命名空间,需要到这里勾选上util。



然后配置如下:

以list集合的集合bean为例:

<!-- 配置单例的集合bean,以供多个bean进行引用,需要导入util命名空间 -->
<util:list id="cars5">
<ref bean="car1"></ref>
<ref bean="car2"></ref>
</util:list>


对于其他类型的集合,直接把list换成对应的集合类型名就行,然后util里面的内容按照上面的集合配置即可。

使用直接用ref即可:

<bean id="person4" class="com.spring.beans.collections.NewPerson">
<property name="name" value="rose"></property>
<property name="age" value="28"></property>
<property name="cars" ref="car5"></property>
</bean>


通过p命名空间为bean属性赋值

通过p命名空间为bean的属性赋值 ,需要先导入p命名空间,相对于传统的配置方式更简洁。

首先导入p命名空间



配置bean:

<!-- 通过p命名空间为bean的属性赋值 ,需要先导入p命名空间-->
<bean id="person5" class="com.spring.beans.collections.Person"
p:age="30" p:name="张三丰" p:cars-ref="cars" ></bean>


注意:

1,为普通属性赋值的写法:p:属性名=“值”;

2,赋值的属性需要通过引用其他bean的,比如上面的p:cars-ref,这种引用其他bean的,写法是:赋值的属性-ref

---恢复内容结束---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: