8.Spring源码之路-DefaulListableBeanFactory - HierarchicalBeanFactory

Spring源码之路-DefaulListableBeanFactory

  • 总结
  • 源码注释的大概翻译

总结

  1. 这个接口比较简单,主要是扩展自接口{org.springframework.beans.factory.BeanFactory},在BeanFactory的基础之上增加了支持父子容器的扩展。
  2. 父子容器我们在用web.xml配置spring的时候,大部分都是用过,比如我们在里面配置了一个
    
    	org.springframework.web.context.ContextLoaderListener
    
    
    	SpringMvc
    	org.springframework.web.servlet.DispatcherServlet
    	
    		contextConfigLocation
    		classpath:spring-mvc.xml
    	
    
    
    这个配置其实就是配置两个spring的容器,由listener创建的容器为父容器,由servlet创建的容器为字容器,子容器可以访问父容器的实例,而父容器不能访问子容器的实例。

源码注释的大概翻译

/**
 * 支持分层的BeanFactory
 *
 * 可以在ConfigurableBeanFactory接口中找到用于bean 
 * 工厂的相应{@code setParentBeanFactory}方法,
 * 该方法允许以可配置的方式设置父对象。 
 *
 * spring中父子容器的核心,在web.xml中配置的 一个是通过Listener加载的
 * 一个是通过Servlet加载的,这个时候的两个BeanFactory是由父子关系的 
 * @author Rod Johnson
 * @author Juergen Hoeller
 * @since 07.07.2003
 * @see org.springframework.beans.factory.config.ConfigurableBeanFactory#setParentBeanFactory
 */
public interface HierarchicalBeanFactory extends BeanFactory {

	/**
	 * 返回父beanFactory,如果没有,则返回{@code null}。
	 */
	@Nullable
	BeanFactory getParentBeanFactory();

	/**
	 * 返回本地beanFactory是否包含给定名称的bean,
	 * 而忽略在祖先上下文中定义的bean。 
	 * 

这是{@code containsBean}的替代方法, * 忽略了祖先bean工厂中具有给定名称的bean * @param name 要查询的bean的名称 * @return 返回是否在本地工厂中定义了具有给定名称的bean * @see BeanFactory#containsBean */ boolean containsLocalBean(String name); }

你可能感兴趣的:(spring源码)