这一节主要学了bean的详细配置
特殊符号的解决方法:
如果字符串里有特殊符号需要用<![CDATA[]]>
引用其他bean
通过引用来使用bean。有时某类bean包含另一类bean。这里要用到ref引用
实例:这里创建两个类person和car,添加toString方法,构造器
Person.class
public class Person {
private String name;
private int age;
private Car car;
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
Car.class
public class Car {
private String name;
private int speed;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public Car(String name, int speed) {
super();
this.name = name;
this.speed = speed;
}
@Override
public String toString() {
return "Car [name=" + name + ", speed=" + speed + "]";
}
}
applicationContext.xml
在配置信息里用ref来引用
<!--
car的bean
-->
<bean id="car" class="jjh.test.Car">
<constructor-arg value="benchi" type="java.lang.String"></constructor-arg>
<constructor-arg value="250" type="int"></constructor-arg>
</bean>
<!--
Person的bean
-->
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="20"></property>
<property name="car" ref="car"></property>
</bean>
内部bean
内部bean写在bean的里面不能被外部bean所引用
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="20"></property>
<!-- <property name="car" ref="car"></property> -->
<!--
内部bean
-->
<property name="car">
<bean class="jjh.test.Car">
<constructor-arg value="BAOBA"></constructor-arg>
<constructor-arg value="240"></constructor-arg>
</bean>
</property>
</bean>
null值和级联属性
级联属性配置的条件:
1.被导入的bean需要完成初始化(构造器完成)
2.必须导入该bean的引用
3.为该bean的属性赋值
<bean id="car" class="jjh.test.Car">
<!-- 1.通过构造器完成初始化 -->
<constructor-arg value="benchi" type="java.lang.String"></constructor-arg>
<constructor-arg value="250" type="int"></constructor-arg>
</bean>
<bean id="person2" class="jjh.test.Person">
<constructor-arg value="jjh" type="java.lang.String"></constructor-arg>
<constructor-arg value="20" type="int"></constructor-arg>
<!-- 2.必须导入car的引用 -->
<constructor-arg ref="car"></constructor-arg>
<!--
为级联属性赋值,注意:属性需要先初始化后才可以为级联属性赋值,不同于struts2
-->
<!--
3.为需要级联的属性赋值
-->
<property name="car.name" value="mazida"></property>
</bean>
集合属性
比如使用List属性
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="21"></property>
<!--
使用List 节点为List类型的属性赋值
-->
<property name="cars">
<list>
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
</list>
</property>
</bean>
比如使用map属性
<!--
使用map配置属性值
-->
<bean id="person" class="jjh.test.Person">
<property name="name" value="jjh"></property>
<property name="age" value="21"></property>
<property name="cars">
<map>
<entry key="aa" value-ref="car"></entry>
<entry key="bb" value-ref="car2"></entry>
<entry key="cc" value-ref="car3"></entry>
</map>
</property>
</bean>
比如使用properties(HashTable的子类)属性配值
<!-- 配置properties属性值 -->
<bean id="dataSource" class="jjh.test.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">1234</prop>
<prop key="jdbcurl">jdbc:mysql://test</prop>
<prop key="user">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
使用Utility scheme,当我们想把集合拿出来,公共使用时。
在.xml下的namespace下将util画√
<!-- 配置单例的集合bean,以供多个bean进行引用 -->
<util:list id="cars">
<ref bean="car" />
<ref bean="car2" />
<ref bean="car3" />
</util:list>
使用p标签的命名空间
<!--
通过p命名空间为bean 的属性赋值,需要先引入p命名空间
-->
<bean id="person4" class="jjh.test.Person" p:age="20" p:name="jjh" p:cars-ref="cars">
</bean>