extends BeanFactory 后增强BeanFactory接口
容器可以有层级关系的
public interface HierarchicalBeanFactory extends BeanFactory { // 获得父容器 @Nullable BeanFactory getParentBeanFactory(); // 本地容器是否存在Bean boolean containsLocalBean(String var1); } 复制代码
extends BeanFactory 后增强BeanFactory接口
容器可以自动装配Bean的能力
主要定义了以下方法:
extends HierarchicalBeanFactory,SingletonBeanRegistry
IOC容器可配置的能力,
设置父容器,设置容器的类装载器,属性编辑器,容器通用的Bean初始化后置处理器等方法;
几乎所有的beanFactory都会实现这个接口,赋予了BeanFactory可扩展的功能。
SingletonBeanRegistry 接口
容器单例Bean相关的能力(在运行期间向容器注册单实例Bean)
public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory 复制代码
整合了BeanFactory体系的接口
主要拓展了以下方法
向容器中注册Bean的能力
spring配置文件中的每一个bean节点元素在spring容器里都通过一个BeanDefinition对象表示,描述了Bean的配置信息。
public interface BeanDefinitionRegistry extends AliasRegistry { //注册BeanBeanDefinition void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException; //移除BeanBeanDefinition void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException; //获得BeanDefinition BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException; boolean containsBeanDefinition(String beanName); String[] getBeanDefinitionNames(); int getBeanDefinitionCount(); boolean isBeanNameInUse(String beanName); } 复制代码
public interface AliasRegistry { //注册一个别名 void registerAlias(String name, String alias); //删除别名 void removeAlias(String alias); //判断是否是别名 boolean isAlias(String beanName); //获得一个名字的所有别名,以String数组的形式返回 String[] getAliases(String name); } 复制代码
我们终于可以看一眼全貌
左侧是我们看过的BeanFactory体系,右侧是BeanDefinitionRegistry和抽象类实现
DefaultListableBeanFactory实现了ConfigurableListableBeanFactory,也就是实现了在BeanFactory体系讲过的能力.
实现了BeanDefinitionRegistry,拥有向容器注册Bean的基本能力
当然还有其他一些,比如SingletonBeannRegistry.
接口的能力是在继承的抽象类逐渐实现的,比如AbstractFactory和AbstractAutowireCapableBeanFactory.