配置Bean
基本配置
<bean id="hello" class="chen.HelloWorld"></bean>
- class:bean的全类名,通过反射方式在ioc容器中创建bean的实例
- id:标识容器中的bean id唯一
配置属性值的两种方式:
1 通过property标签为bean实例赋值(set方法)
<bean id="hello" class="chen.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
这种赋值方式是spring容器通过实例的set方法为属性赋值
2 通过constructor-arg标签为bean实例赋值(构造器配置属性)
<bean id="zhansan" class="chen.Person">
<constructor-arg value="张三" ></constructor-arg>
<constructor-arg value="24" ></constructor-arg>
</bean>
- constructor-arg是构造器的参数顺序 通过指定 type 属性来区分重载构造器
<bean id="lishia" class="chen.Person">
<constructor-arg value="1" type="int"></constructor-arg>
<constructor-arg value="2" type="int"></constructor-arg>
</bean>
- 也可以使用constructor-arg节点下的value子节点来表示 这样和上面是等价的写法
<bean id="lishib" class="chen.Person">
<constructor-arg value="1" type="int"></constructor-arg>
<constructor-arg type="int">
<value>2</value>
</constructor-arg>
</bean>
- 如果字面值包涵特殊字符可以使用 <![CDATA[值]]> 包裹
bean引用两种方式:
1 使用ref 指向引用bean
<bean id="car" class="chen.Car">
<property name="brand" value="宝马"></property>
<property name="price" value="100000000"></property>
</bean>
<!-- 使用ref 指向引用bean 在Person类有Car类型的属性值-->
<bean id="wu" class="chen.Person">
<constructor-arg value="王五" ></constructor-arg>
<constructor-arg value="24" ></constructor-arg>
<property name="car" ref="car"></property>
</bean>
2 使用内部bean 注意 :内部bean无法在外部引用
<bean id="zs" class="chen.Person">
<constructor-arg value="猪三" ></constructor-arg>
<constructor-arg value="25" ></constructor-arg>
<property name="car" >
<bean class="chen.Car">
<property name="brand" value="奔驰"></property>
<property name="price" value="100000000"></property>
</bean>
</property>
</bean>
使用<null/>赋值为null 意义不大
<bean id="px" class="chen.Person">
<constructor-arg value="潘小" ></constructor-arg>
<constructor-arg value="25" ></constructor-arg>
<property name="car"><null/></property>
</bean>
级联属性 注意:要先创建级联属性 然后在赋值
<bean id="car" class="chen.Car">
<property name="brand" value="宝马"></property>
<property name="price" value="100000000"></property>
</bean>
<bean id="hx" class="chen.Person">
<constructor-arg value="何小" ></constructor-arg>
<constructor-arg value="25" ></constructor-arg>
<property name="car" ref="car"></property>
<property name="car.brand" value="我换成法拉利"></property>
</bean>
集合属性赋值
- 用list标签中的 ref(引用外不bean) bean (内部bean)value(基本类型或String)子标签 来为list类型赋值
截取代码:
<!--phones属性是一个集合对象 -->
<property name="phones">
<!-- 用list标签中的 ref bean value子标签 来为list类型赋值-->
<list>
<!--phones属性是一个集合对象 -->
<ref bean="pg"/>
<ref bean="xm"/>
</list>
</property>
- 用map标签中的 entry子标签的key value(基本类型或String)或value-ref()(bean) 来为map类型赋值
<property name="phones">
<!-- 用map标签中的 entry子标签的key value或value-ref 来为map类型赋值-->
<map>
<entry key="a" value="444"></entry>
<entry key="a" value-ref="xm"></entry>
</map>
</property>
- 用props标签中的 prop子标签 来为Properties类型赋值
<property name="XXXX">
<!-- 用props标签中的 prop子标签 来为Properties类型赋值-->
<props>
<prop key="a">值1</prop>
<prop key="b">值2</prop>
</props>
</property>
配置独立集合bean 需要导入util命名空间 util:list util:map..等独立出来
<util:list id="list">
<ref bean="pg"/>
<ref bean="xm"/>
</util:list>
一些数据集合会被多个bean所引用时可以使用
通过p命名空间为bean的属性赋值,需要导入p命名空间
<bean id="hw" class="chen.phone" p:brand="华为" p:price="50000"></bean>
这样配置会很简单
总结:
property标签 和 constructor-arg标签 除了constructor-arg name属性 其他的配置方式基本一样
下一篇 spring学习4
网友评论