HierarchicalBeanFactory

来源:互联网 发布:万能五笔 for mac os 编辑:程序博客网 时间:2024/05/19 22:02

HierarchicalBeanFactory层次化的工厂类

public interface HierarchicalBeanFactory extends BeanFactory {    /**     * Return the parent bean factory, or {@code null} if there is none.     */    BeanFactory getParentBeanFactory();    /**     * Return whether the local bean factory contains a bean of the given name,     * ignoring beans defined in ancestor contexts.     * <p>This is an alternative to {@code containsBean}, ignoring a bean     * of the given name from an ancestor bean factory.     * @param name the name of the bean to query     * @return whether a bean with the given name is defined in the local factory     * @see BeanFactory#containsBean     */    boolean containsLocalBean(String name);}

在创建容器的过程中也可以传入父类的容器,配置如下
父类XML配置(parent.xml):

<bean class="java.lang.String" id="parentname">    <constructor-arg value="parent"/></bean>

子类(child.xml):



<bean class="com.he.hierarchicalIOC.Entity" id="entity2">    <property name="name">        <ref parent="parentname"/>    </property></bean><bean class="java.lang.String" id="childname">    <constructor-arg value="childname"/></bean><bean class="com.he.hierarchicalIOC.Entity" id="entity3">    <property name="name">        <ref local="childname"/>    </property></bean>

子类创建容器的过程中传入父类的容器:

public class APP{    public static void main(String[] args) {        ApplicationContext parent = new ClassPathXmlApplicationContext("com/he/hierarchicalIOC/parent.xml");        ApplicationContext child = new ClassPathXmlApplicationContext(new String[]{"child.xml"},parent);        Entity entiy1 = (Entity)child.getBean("entity1");        Entity entiy2 = (Entity)child.getBean("entity2");        Entity entiy3 = (Entity)child.getBean("entity3");        entiy1.performance();        entiy2.performance();        entiy3.performance();        System.out.println(ClassLoader.getSystemClassLoader());        System.out.println(ClassLoader.getSystemClassLoader().getParent());    }}

输出结果如下:

hellochildhelloparenthellochildnamesun.misc.Launcher$AppClassLoader@16b98e56sun.misc.Launcher$ExtClassLoader@75a1cd57
0 0