Sub-interface implemented by bean factories that can be part of a hierarchy.
HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean
public interface HierarchicalBeanFactory extends BeanFactory {
BeanFactory getParentBeanFactory(); //返回本Bean工厂的父工厂
boolean containsLocalBean(String name); //本地工厂是否包含这个Bean
}
1、第一个方法返回本Bean工厂的父工厂。这个方法实现了工厂的分层。
2、第二个方法判断本地工厂是否包含这个Bean(忽略其他所有父工厂)。这也是分层思想的体现。
总结:这个工厂接口非常简单,实现了Bean工厂的分层。这个工厂接口也是继承自BeanFacotory,也是一个二级接口,相对于父接口,它只扩展了一个重要的功能——工厂分层。
parent.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="injectBean" class="java.lang.String">
<constructor-arg>
<value>Bean In Parent</value>
</constructor-arg>
</bean>
<bean id="injectBeanParent" class="java.lang.String">
<constructor-arg>
<value>Bean In Parent</value>
</constructor-arg>
</bean>
</beans>
beans.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- hierarchical bean factories -->
<bean id="target1" class="SimpleTarget">
<property name="val">
<ref bean="injectBeanParent"/>
</property>
</bean>
<bean id="target2" class="SimpleTarget">
<property name="val">
<ref local="injectBean"/>
</property>
</bean>
<bean id="target3" class="SimpleTarget">
<property name="val">
<ref parent="injectBean"/>
</property>
</bean>
<bean id="injectBean" class="java.lang.String">
<constructor-arg>
<value>Bean In Child</value>
</constructor-arg>
</bean>
</beans>
SimpleTarget中只有一属性String val
public static void main(String[] args) {
BeanFactory parent = new XmlBeanFactory(new FileSystemResource(
"build/parent.xml"));
BeanFactory child = new XmlBeanFactory(new FileSystemResource(
"build/beans.xml"), parent);
SimpleTarget target1 = (SimpleTarget) child.getBean("target1");
SimpleTarget target2 = (SimpleTarget) child.getBean("target2");
SimpleTarget target3 = (SimpleTarget) child.getBean("target3");
System.out.println(target1.getVal());
System.out.println(target2.getVal());
System.out.println(target3.getVal());
}
运行结果:
- Bean In Parent
- Bean In Child
- Bean In Parent
分析过程:
- 在bean factory被加载过程中分别加载各层Bean Factory,
- BeanFactory parent = new XmlBeanFactory(new FileSystemResource("build/parent.xml"));
- BeanFactory child = new XmlBeanFactory(new FileSystemResource("build/beans.xml" ), parent);
- 其中parent参数指定了bean factory间的父子关系。
分析结果:
- 第一行结果为在父factory中定义的参数,说明在子fantory中可以直接调用父fantory元素,类似于java中的继承关系。
- 第二行结果说明 < ref local ="injectBean" />中local指向本fantory元素。
- 第三行结果为Bean In Parent,说明 < ref parent ="injectBean" />中parent指向父fantory中元素。
分享到:
相关推荐
不同于其它的架构方法,领域驱动设计DDD(DomainDrivenDesign)提出了从业务设计到代码实现一致性的要求,不再对分析模型和实现模型进行区分。也就是说从代码的结构中我们可以直接理解业务的设计,命名得当的话,非...
弹性力学材料模型:分层材料:智能分层材料与结构.docx
弹性力学材料模型:分层材料:弹性力学基础理论.docx
弹性力学材料模型:分层材料:复合材料弹性理论.docx
弹性力学材料模型:分层材料:材料科学与工程导论.docx
弹性力学材料模型:分层材料:材料力学性能测试与分析.docx
弹性力学材料模型:分层材料的力学特性.docx
在应用系统开发中,采用严格的、单一的、真正的的分层架构是可以的,但实际上我们已经采用了多种架构模式设计系统。当多种不同范式的架构混合在一起,你会不会出现“指鹿为马”的现象呢? 在研究分层架构时,常通过...
弹性力学材料模型:分层材料:层状材料的界面效应技术教程.docx
弹性力学材料模型:分层材料:弹性力学中的应力与应变分析.docx
弹性力学材料模型:分层材料的热弹性行为教程.docx
弹性力学材料模型:分层材料的有限元分析方法.docx
弹性力学材料模型:分层材料与非线性弹性力学.docx
高中数学必修三课件:分层抽样PPT课件.pptx
弹性力学材料模型:分层材料的损伤与断裂力学教程.docx
弹性力学材料模型:分层材料的优化设计与制造教程.docx
弹性力学材料模型:分层材料在生物医学工程中的应用.docx
弹性力学材料模型:分层材料在航空航天领域的应用技术教程.docx
【标题】:“33传统的可扩展架构模式:分层架构和SOA1” 【描述】:“1. C/S架构、B/S架构 3. 逻辑分层架构 1. 服务” 【标签】:“微服务 mvc 操作系统” 本文将深入探讨两种传统可扩展架构模式:分层架构和面向...
A股进化论20系列报告(一):分层时代,进化新生-0718-广发证券-26页.pdf