8.Spring源碼之路-DefaulListableBeanFactory - HierarchicalBeanFactory

Spring源碼之路-DefaulListableBeanFactory

總結

  1. 這個接口比較簡單,主要是擴展自接口{org.springframework.beans.factory.BeanFactory},在BeanFactory的基礎之上增加了支持父子容器的擴展。
  2. 父子容器我們在用web.xml配置spring的時候,大部分都是用過,比如我們在裏面配置了一個
    <listener>
    	<listenre-class>org.springframework.web.context.ContextLoaderListener</listenre-class>
    </listener>
    <servlet>
    	<servlet-name>SpringMvc</servlet-name>
    	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	<init-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:spring-mvc.xml</param-value>
    	</init-param>
    </servlet>
    
    這個配置其實就是配置兩個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。 
	 * <p>這是{@code containsBean}的替代方法,
	 * 忽略了祖先bean工廠中具有給定名稱的bean 
	 * @param name 要查詢的bean的名稱
	 * @return 返回是否在本地工廠中定義了具有給定名稱的bean 
	 * @see BeanFactory#containsBean
	 */
	boolean containsLocalBean(String name);

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章