BeanFactory和ObjectFactory的區別

BeanFactoryhtml

package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;
public interface BeanFactory {

	String FACTORY_BEAN_PREFIX = "&";
	Object getBean(String name) throws BeansException;
	<T> T getBean(String name, Class<T> requiredType) throws BeansException;
	Object getBean(String name, Object... args) throws BeansException;
	<T> T getBean(Class<T> requiredType) throws BeansException;
	<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
	<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
	<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
	boolean containsBean(String name);
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
	boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
	boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
	boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
	@Nullable
	Class<?> getType(String name) throws NoSuchBeanDefinitionException;
	@Nullable
	Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
	String[] getAliases(String name);

}
  1. String FACTORY_BEAN_PREFIX = "&";

String FACTORY_BEAN_PREFIX = "&"; 這句代碼定義在BeanFactory這個最頂級的接口中。他的做用是若是在使用beanName獲取Bean時,在BeanName前添加這個前綴, 那麼使用這個BeanName得到的Bean實例是其所在FactoryBean的實例,也就是實現 FactoryBean 接口的那個類的Bean實例。java

  1. Object getBean(String name) throws BeansException;

經過Bean名稱獲取Beanspring

  1. <T> T getBean(String name, Class<T> requiredType) throws BeansException;

根據名稱和類型獲取Beanide

  1. Object getBean(String name, Object... args) throws BeansException;

經過name和對象參數獲取Beanui

  1. <T> T getBean(Class<T> requiredType) throws BeansException;

經過類型獲取Beancode

  1. <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

經過類型和參數獲取Beanhtm

  1. <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);

返回指定ObjectProvider,提供延遲加載功能對象

  1. <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);

Class,Field,Method 類型的延遲加載功能接口

  1. boolean containsBean(String name);

容器中是否包含名字爲name的Beanget

  1. boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

Bean是不是單例

  1. boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

判斷bean是否是原型

  1. boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

檢查具備給定名稱的bean是否與指定的類型(Class,Field,Method 類型)匹配。

  1. boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

檢查具備給定名稱的bean是否與指定的類型匹配。

  1. Class<?> getType(String name) throws NoSuchBeanDefinitionException;

肯定具備給定名稱的bean的類型

  1. Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;

肯定具備給定名稱的bean的類型

  1. String[] getAliases(String name);

返回給定bean名稱的別名

ObjectFactory

package javax.naming.spi;

import java.util.Hashtable;

import javax.naming.*;


public interface ObjectFactory {
    //爲指定對象和環境建立一個對象實例
    public Object getObjectInstance(Object obj, Name name, Context nameCtx,
                                    Hashtable<?,?> environment)
        throws Exception;
}

相同點

BeanFactory和ObjectFactory都提供依賴查找的能力

區別

  • BeanFactory實現了ObjectFactory接口

  • ObjectFactory僅僅關注一個或者一種類型Bean的查找,而且自身不具有依賴查找的能力.

  • BeanFactory則提供單一類型,集合類型和層次性的依賴查找能力.

原文: https://rumenz.com/rumenbiji/Spring-BeanFactory-ObjectFactory.html

相關文章
相關標籤/搜索