spring學習之源碼分析--BeanFactory

BeanFactory

BeanFactory是Spring體系中的一個最底層的容器,提供了獲取bean以及bean的屬性的方法。ide

類結構

image.png

字段

// 用於取FactoryBean
String FACTORY_BEAN_PREFIX = "&";

方法解析

getBean

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;

getBean方法,主要經過bean的名稱、bean的名稱+類型、bean的名稱+構造參數、bean的類型、bean的類型+構造參數來獲取bean。函數

getBeanProvider

<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);

經過bean的類型、ResolvableType獲取ObjectProvider。ui

其餘方法

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;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String\[\] getAliases(String name);

容器中是否包含某個bean、是不是單例、是不是多例、是不是某個類型、獲取bean的類型、獲取別名。
這幾個比較經常使用,咱們就大概過一下。spa

ObjectProvider

做用於隱式的構造函數注入,也就是說,在構造方法中,不用@Autowired也能夠注入成功。
主要的方法有兩個:3d

  • getIfAvailable:實際存在才返回一個實例。
  • getIfUnique: 有多個實例時,返回默認的實例(好比primary)

ResolvableType

主要是對泛型的處理,使對泛型的操做更簡單code

相關文章
相關標籤/搜索