spring depends-on
来源:互联网 发布:死亡之屋4软件下载 编辑:程序博客网 时间:2024/05/22 13:25
depend-on用来表示一个Bean的实例化依靠另一个Bean先实例化。如果在一个bean A上定义了depend-on B那么就表示:A 实例化前先实例化 B。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 <bean name="dao" class="research.spring.beanfactory.ch3.Dao" depends-on="database"> 7 </bean> 8 <bean id="database" class="research.spring.beanfactory.ch3.Database"> 9 </bean> 10 </beans>
DAO depend-on Database时,也可以在DAO上定义setDatabase方法来接收一个Database的实例。这样Sping会保证DAO创建前先创建Database实例,然后在把实例化DAO后调用DAO的setDatabase方法把刚才创建的Database的实例注入给DAO。前提条件时Database必须定义成单例的。否则Spring在DAO depend-on Database时会创建一个Database的实例,在DAO.setDatabase时又会创建Database另外的一个实例。这种情况可能不是你想要的,而且很可能会造成比较隐蔽的错误。
1 ?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 7 <bean name="dao" class="research.spring.beanfactory.ch3.Dao" depends-on="database "> 8 <property name="database"> 9 <ref bean="database"></ref>10 </property>11 </bean>12 <bean id="database" class="research.spring.beanfactory.ch3.Database">13 </bean> 14 </beans>
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 <bean name="dao" class="research.spring.beanfactory.ch3.Dao" depends-on="database"> 7 <constructor-arg> 8 <ref bean="database"></ref> 9 </constructor-arg>10 </bean>11 <bean id="database" class="research.spring.beanfactory.ch3.Database">12 13 </bean> 14 </beans>
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 <bean name="a" class="research.spring.beanfactory.ch3.A" depends-on="b" /> 7 <bean name="b" class="research.spring.beanfactory.ch3.B" depends-on="c" /> 8 <bean name="c" class="research.spring.beanfactory.ch3.C" depends-on="D" /> 9 <bean name="d" class="research.spring.beanfactory.ch3.D" />10 11 </beans>
但是Spring不允许A depends-on B && B depends-on A的情况。看下面的例子,由于D又依赖回A,这种在依赖关系中形成了一个闭环,Spring将无法处理这种依赖关系。所以下面的这种定义是不合法的。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 <bean name="a" class="research.spring.beanfactory.ch3.A" depends-on="b" /> 7 <bean name="b" class="research.spring.beanfactory.ch3.B" depends-on="c" /> 8 <bean name="c" class="research.spring.beanfactory.ch3.C" depends-on="D" /> 9 <bean name="d" class="research.spring.beanfactory.ch3.D" depends-on="A"/>10 11 </beans>
一个Bean可以同时depends-on多个对象如,A depends-on D,C,B。可以使用“,”或“;”定义多个depends-on的对象。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 4 "http://www.springframework.org/dtd/spring-beans.dtd"> 5 <beans> 6 <bean name="a" class="research.spring.beanfactory.ch3.A" depends-on="d,c,b" /> 7 <bean name="b" class="research.spring.beanfactory.ch3.B" /> 8 <bean name="c" class="research.spring.beanfactory.ch3.C" /> 9 <bean name="d" class="research.spring.beanfactory.ch3.D" />10 11 </beans>
上面的例子中A的实例化需要先实例化D,C,B。Spring会按照depend-on中定义的顺序来处理Bean。在这个例子里Spring实例化对象的顺利是D->C->B->A。虽然实例化对象的顺序和前面“A depends-on B && B depends-on C && C depends-on D”的情况一下,但是这里的意义是完全不同的。不能用“A depends-on D,C,B”代替“A depends-on B && B depends-on C && C depends-on D”。
depends-on是一个非常又用的功能,借助depends-on我们可以管理那些依赖关系不明显或者没有直接依赖关系的对象。
- Spring depends-on
- Spring depends-on
- Spring depends-on介绍
- Spring的 depends-on
- spring depends-on
- Spring 标签属性 depends-on
- spring的depends-on属性
- spring的懒加载和depends-on
- Spring bean加载顺序 depends-on
- Spring中depends-on的作用是什么?
- Spring中depends-on的作用是什么?
- Spring的depends-on属性Bean依赖
- Spring的depends-on属性Bean依赖
- Spring Framework 总结 -- depends-on 和延迟初始化
- SPRING.NET 1.3.2 学习16--使用depends-on
- Spring管理Bean之间的关系一(depends-on)
- Spring常用xml配置,如depends-on,init-method
- 【Spring学习14】延迟初始化lazy-init与depends-on
- spring bean parent属性详解
- 1 Apache Shiro 简介
- Keepalived(rpm包)+LVS高可用集群配置
- C语言基础-部分基础理论知识汇总
- 最爱的歌和作者
- spring depends-on
- 关于Spring中的[控制反转]和[依赖注入]的深入理解
- Qzone高性能HTTPS实践
- 牛牛的数列-Java-牛客模拟三
- OnTriggerEnter2D(Collider2D)和Component.tag
- toString().trim()是什么意思
- codevs1378 选课-树形dp
- Spring Bean的作用域类型
- JavaMailSender' available: expected at least 1 bean which qualifies as autow