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); }
- String FACTORY_BEAN_PREFIX = "&";
String FACTORY_BEAN_PREFIX = "&"; 這句代碼定義在BeanFactory這個最頂級的接口中。他的做用是若是在使用beanName獲取Bean時,在BeanName前添加這個前綴, 那麼使用這個BeanName得到的Bean實例是其所在FactoryBean的實例,也就是實現 FactoryBean 接口的那個類的Bean實例。java
- Object getBean(String name) throws BeansException;
經過Bean名稱獲取Beanspring
- <T> T getBean(String name, Class<T> requiredType) throws BeansException;
根據名稱和類型獲取Beanide
- Object getBean(String name, Object... args) throws BeansException;
經過name和對象參數獲取Beanui
- <T> T getBean(Class<T> requiredType) throws BeansException;
經過類型獲取Beancode
- <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
經過類型和參數獲取Beanhtm
- <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
返回指定ObjectProvider,提供延遲加載功能對象
- <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
Class,Field,Method 類型的延遲加載功能接口
- boolean containsBean(String name);
容器中是否包含名字爲name的Beanget
- boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
Bean是不是單例
- boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
判斷bean是否是原型
- boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
檢查具備給定名稱的bean是否與指定的類型(Class,Field,Method 類型)匹配。
- boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
檢查具備給定名稱的bean是否與指定的類型匹配。
- Class<?> getType(String name) throws NoSuchBeanDefinitionException;
肯定具備給定名稱的bean的類型
- Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
肯定具備給定名稱的bean的類型
- 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