3

BeanFactory

BeanFactory是Spring体系中的一个最底层的容器,提供了获取bean以及bean的属性的方法。

类结构

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。

其他方法

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的类型、获取别名。
这几个比较常用,我们就大概过一下。

ObjectProvider

作用于隐式的构造函数注入,也就是说,在构造方法中,不用@Autowired也可以注入成功。
主要的方法有两个:

  • getIfAvailable:实际存在才返回一个实例。
  • getIfUnique: 有多个实例时,返回默认的实例(比如primary)

ResolvableType

主要是对泛型的处理,使对泛型的操作更简单


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆