<bean>
和<beans>
标签
在spring中所有被注册的对象都可以称作为bean,所以很容易理解标签含义,beans就是bean的集合
是XML中顶级元素,对其有几项属性设置:
- default-lazy-init 延迟初始化,可选属性为:true或者false
- default-autowire 自动绑定,可选属性为:no(默认不是自动绑定),byName, byType, constructor, autodetect
- default-dependency-check 依赖检查,可选属性:none(默认不检查)、object、simple和all
- defaul-init-method 初始化方法,如果不同的bean有相同的初始化方法,可以使用
- default-destroy-method 对应上面的销毁方法,如果所有的bean采用了相同名称的方法来销毁方法,可以通过全局设定
有一些可选的属性值:
<description>
标签是用来添加对beans的描述,数量为1或者0个
<import>
配置所依赖的其他配置文件,通过标签来引用
<alias>
为bean取别名
<bean>
是用来传入实体对象的,最常见的属性是:①id 用来区别各个bean ②class 注册对象通过这个来获取到对象类型
如过对象中含有注册方法,也可以通过XML配置将bean注册进入,这里会使用到<constructor-arg>
<bean id="djNewsProvider" class="...FXNewsProvider">
<constructor-arg>
<ref bean="djNewsListener"/>
</constructor-arg>
<constructor-arg>
<ref bean="djNewsPersister"/>
</constructor-arg>
</bean>
<ref>
中存放的信息也是注册过的bean,引用的是其他的实体对象
type属性的使用:如果构造方法中有传入的参数值可以使用
<bean id="mockBO" class="..MockBusinessObject">
<constructor-arg type="int">
<value>111111</value>
</constructor-arg>
</bean>
index属性的使用:对应的上面的属性,是为了传入参数的顺序,起始位置为0
在XML中配置setter方法,spring并提供了property属性
<bean id="djNewsProvider" class="..FXNewsProvider">
<property name="newsListener" ref="djNewsListener"/>
<property name="newPersistener" ref="djNewsPersister"/>
</bean>
<property>
和<constructor-arg>
中可用的配置:
(1) <value>
用来注入简单的数据类型,且是最底层的元素,内部不能在嵌套:
<constructor-arg value="1"/>
<property name="attributeName" value="2"/>
(2) <ref>
用来指定引用其他的对象,有local、parent、bean属性
constructor-arg>
<ref local="djNewsPersister"/>
</constructor-arg>
//用于指定相同配置文件中的对象
<constructor-arg>
<ref parent="djNewsPersister"/>
</constructor-arg>
//引用当前容器的父容器中注入的对象
<constructor-arg>
<ref bean="djNewsPersister"/>
</constructor-arg>
//都能够使用
(3) <idref>
为当前对象注入对象而不是引用,在容器解析时候就能检测该对象是否存在
<property name="newsListenerBeanName">
<idref bean="djNewsListener"/>
</property>
(4) 内部<bean>
当希望当前的对象只被其引用类使用的时候,可以使用内部<bean>
,<bean>
的所有属性都可以正常使用
<bean id="djNewsProvider" class="..FXNewsProvider">
<constructor-arg index="0">
<bean class="..impl.DowJonesNewsListener"></bean>
</constructor-arg>
<constructor-arg index="1">
<ref bean="djNewsPersister"/>
</constructor-arg>
</bean>
(5) <list>
用来注入类型为java.util.List类型的数组和其子类对象
public class elementObject{
private List param1;
private int[] param2;
}
--------对应的XML配置---------
<property name="param1">
<list>
<value>something</value>
<ref bean="someBeanName"/>
<bean class="..."/>
</list>
</property>
<property name="param2">
<list>
<value>stringValue1</value>
<value>stringValue2</value>
</list>
</property>
(6) <set>
对应上面的标签,可以注入的无序的java.util.Set类型依赖
<property name="valueSet">
<set>
<value> something</value>
<ref bean="someBeanName"/>
<bean class="..."/>
<list>
...
</list>
</set>
</property>
(7) <map>
对应注入java.util.Map对象
<property name="mapping">
<map>
<entry key="strValueKey">
<value>something</value>
</entry>
<entry>
<key>objectKey</key>
<ref bean="someObject"/>
</entry>
<entry key-ref="lstKey">
<list>
...
</list>
</entry>
...
</map>
</property>
其内部属性<entry>
和<value>
注入的是key-value对
(8) <props>
可以看做是简化之后的<map>
,使用方法:
<property name="valueSet">
<props>
<prop key="author">fujohnwang@gmail.com</prop>
<prop key="support">support@spring21.cn</prop>
...
</props>
</property>
(9)<null/>
注入的对象为null