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

Spring中 idref元素的使用

2007-11-29 15:53 204 查看
[align=center]dref元素的使用[/align]
idref元素用来将容器内其它bean的id传给<constructor-arg/>或<property/>元素,同时提供错误验证功能.
<bean id ="theTargetBean" class="…"/>
<bean id="theClientBean" class="…">
<property name="targetName">
<idref bean="theTargetBean"/>
</property>
</bean>
使用idref标记允许容器在部署时 验证所被引用的bean的是否存在.

应用其他bean(协作者)
在<constructor-arg/>或<property/>元素内部还可以使用ref元素.用来将bean中指定属性的值设置为对容器中的另外一个bean的引用.
使用<ref/>标记: <ref bean="someBean"/>
这里'bean'元素的值即可是指定bean的id值也可以是name值.
<ref local="someBean"/>
这里所引用的bean必须在同一个XML文件中,而且必须是目标bean的id属性值.
1).使用depends-on
这个属性可以用于当前bean初始化之前显示地强制一个或多个bean被初始化.
<bean id = "beanOne" class = "ExampleBean" depends-on="manager"/>
<bean id = "manager" class = "ManagerBean"/>
若依赖多个bean可以在depends-on中将指定的多个bean名字用分隔符进行分隔.
就是当程序运行是首先初始化manager--bean,然后在初始化 beanOne--bean.
2).延迟初始化bean
ApplicationContext默认行为就是在启动时将所有singleton bean提前进行实例化.
<bean id="lazy" class="com.foo.ExpensiveBean" lazy-init="true"></bean>
<bean name="not.lazy" class="com.foo.AnotherBean"></bean>
当启动时,设置为lazy的bean将不会提前被实例化, 而not.lazy却会被提前实例化.
如果一个singleton bean依赖于某个被设置为 lazy的bean,这时启动时可能会同时加载初始化.
3).自动装配(autowire)协作者
autowire的方便之处在减少或者消除属性或构造器参数的设置.
autowire共有五种类型:

1).no ---不是用自动装配.必须通过ref元素指定依赖,这是默认设置.

2).byName--根据属性名自动装配.此项将检查容器并根据名字查找与属性完全一致的bean.

3).tyType--查找一个与指定属性类型相同的bean.

4).constructor--根据构造函数名来查找相匹配的bean.

5).autodetect--它根据bean的自身机制来决定是使用constructor还是byType方式进行自动装配.

4).设置Bean自动装配失效
把<bean/>元素的autowire-candidate属性设为false,这样容器在查找自动装配对象时将不会考虑该bean.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: