1 概述
这是进入Spring bean容器的基础接口,她的子类(例如:ListableBeanFactory、ConfigurableBeanFactory)还提供了更多个用处,我们后面会对其子类进行分析。
这个接口的实现类拥有beanDefinition对象,每个beanDefinition对象都和一个唯一的name对应,并将这种对应关系用Map保存起来。
通过这个BeanFactory我们可以访问bean,并且获取bean的一些特点。在这里我们不仅仅分析BeanFactory,我们还要分析她的具体子类。下面我们就来看看具体的源码。
2 属性
BeanFactory的属性比较简单,她的源码如下:
String FACTORY_BEAN_PREFIX = "&";
我们知道通过getBean可以获取我们想要的Bean,而getBean函数其实最终是调用的FactoryBean实现类的getObject函数,那么如果我们想要获得FactoryBean对象呢?这个时候就需要在我们获取的bean的名称前面加上“&”符号。
3 函数
针对函数的学习,其实我们可以通过看源码的注释就能有一个比较全面的了解,这里我简单对注释进行翻译一下。
/**
* 返回指定名称的bean实例,当然这里针对单列模式和非单列模式都适用。
*/
Object getBean(String name) throws BeansException;
/**
* 返回指定名称的bean实例,但是这里强调了类型的一致性。
*/
<T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;
/**
* 返回指定名称的bean实例,这里使用具体的构造参数来构造具体对象。
*/
Object getBean(String name, Object... args) throws BeansException;
/**
* 返回指定类型的bean实例
*/
<T> T getBean(Class<T> requiredType) throws BeansException;
/**
* 返回指定类型的bean实例,这里使用具体的构造参数来构造具体对象。
*/
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
/**
* 返回是否包含具体名称的bean
*/
boolean containsBean(String name);
/**
* 返回指定名称的bean是否是单列的
*/
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
/**
* 返回指定名称的bean是否是非单列的
*/
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
/**
* 返回指定名称的bean是否是指定类型的
*/
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
/**
* 返回指定名称的bean是否是指定类型的
*/
boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
/**
* 获取指定名称的bean的类型
*/
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
/**
* 获取指定名称bean的别名
*/
String[] getAliases(String name);
上面就是对BeanFactory的分析,接下来我会继续分析其派生类,欢迎交流!