使用ref来引用容器中其他对象实例,可以通过ref的local,parent,bean属性来指定引用的对象的beanName是什么
属性 | 说明 |
---|---|
local | 指定与当前配置的对象在同一个配置文件的对象定义的名称 |
parent | 指定位于当前容器的父容器中定义的对象的引用 |
bean | 适用于任何情况 |
对parent属性的说明:
BeanFactory可以分层次,通过实现HierarchicalBeanFactory接口,容器A在初始化的时候可以首先加载容器B中的所有对象定义,然后加载自身的对象定义
使用示例
<constructor-arg>
<ref parent="djNewsPersister"/>
</constructor-arg>
如果要往当前对象注入锁依赖的对象的名称而不是引用,那么通常可以使用value来完成
<property name="newsListenerBeanName"> 3
<value>djNewsListener</value>
</property>
但是上面的情况可能会存在输错字,使用idref可以检查这个beanname所在的bean是否存在
<property name="newsListenerBeanName"> 3
<idref>djNewsListener</idref>
</property>
bean可以作为内部bean标签
<constructor-arg index="0">
<bean class="com.xxx.pojo.Student" />
</constructor-arg>
depends-on属性
spring容器会根据ref属性来指定bean的依赖,如果有时候没有使用ref标签就要使用depends-on属性来决定依赖关系
<bean id="bean1" class="...ClassA" depends-on="bean1,bean2"/>
<bean id="bean2" class="..."/>
<bean id="bean3" class="..."/>
autowire
指定当前bean采用某种类型的自动绑定模式
但是要注意的是自动绑定只应用于“原生类型、String类型以及Classes类型以外”的对象类型,对“原生类型、String类型和Classes类型”以及“这些类型的数组”应用自动绑定是无效的。
使用示例
<bean id="beanName" class="..." autowire="no"/>
bean有5中自动绑定模式
1.no
不使用任何形式的自动绑定,完全依赖于手工明确配置各个bean之间的依赖关系
<bean id="beanName" class="..." autowire="no"/>
2.byName
按照类中声明的实例变量的名称,与XML配置文件中声明的bean定义的beanName的值进行匹配
public class Bean{
private Bean2 bean2;
...
}
<bean id="bean1" class="...Bean" autowire="byName">
</bean>
<bean id="bean2" class="...">
</bean>
3.byType
根据类型绑定,如果找不到相应的类型就自动报错
4.constructor
根据构造方法的参数类型进行的自动绑定
5.autodetect
这种模式是byType和constructor模式的结合体,如果对象拥有默认无参数的构造方法,容器会优先考虑byType的自动绑定模式。否则,会使用constructor模式。当然,如果通过构造方法注入绑定后还有其他属性没有绑定,容器也会使用byType对剩余的对象属性进行自动绑定。
dependency-check
该功能可以帮我们检查每个对象某种类型的所有依赖是否全部注入完成
1.none不做依赖检查
2.simple对简单类型以及相关类型的集合进行依赖检查
3.object只对引用类型进行检查
4.all将simple和object相结合
lazy-init
延迟初始化
list对应注入对象类型为java.util.List及其子类或者数组类型的依赖对象
public class MockDemoObject{
private List param1;
private String[] param2;
...
// 相应的setter和getter方法
...
}
<property name="param1">
<list>
<value> something</value>
<ref bean="someBeanName"/>
<bean class="..."/>
</list>
</property>
set对应java.util.Set或者子类的依赖对象
public class MockDemoObject
{
private Set valueSet;
// 必要的setter和getter方法
...
}
配置类似于
<property name="valueSet">
<set>
<value> something</value>
<ref bean="someBeanName"/>
<bean class="..."/>
<list>
...
</list>
</set>
</property>
map使用entry作为其子标签
public class MockDemoObject{
private Map mapping;
// 必要的setter和getter方法
}
<property name="mapping">
<map>
<entry key="strValueKey">
<value>something</value>
</entry> 8
<entry>
<key>objectKey</key>
<ref bean="someObject"/>
</entry>
<entry key-ref="lstKey">
<list>
10 ...
</list>
</entry>
</map>
< /property>
也可以这样配置
<property name="valueSet">
<map>
<entry key="strValueKey" value="something"/>
<entry key-ref="" value-ref="someObject"/>
<entry key-ref="lstKey">
<list>
...
</list>
</entry>
</map>
</property>
props是对应的类型是java.util.Properties,只能配置String类型的key,value
public class MockDemoObject
{
private Properties emailAddrs;
// 必要的setter和getter方法
...
}
配置类似于
<property name="valueSet">
<props>
<prop key="author">fujohnwang@gmail.com</prop>
<prop key="support">support@spring21.cn</prop>
...
</props>
</property>
对应一个空元素
<property name="param1">
<null/>
</property>
<property name="param2">
<null/>
</property>