Spring Ioc 容器设计可以分为两个路线, 一个是以 BeanFactory 为主的简单容器, 另一个是以 ApplicationContext
为主的高级容器, 高级容器增加了许多面向实际的功能, 让原本在 BeanFacotory
当中实现编码的功能使用配置就可以完成。
BeanFactory 常用方法
ListableBeanFactory
该接口可以以列表的形式提供 Bean 的相关信息, 可以批量的列出工厂生产实例的信息, 可以获取所有 Bean 的名称集合, BeanDifinition
注册的总数。
HierarchicalBeanFactory
- 第一个方法返回本 Bean 工厂的父工厂。这个方法实现了工厂的分层。
- 第二个方法判断本地工厂是否包含这个 Bean(忽略其他所有父工厂)。这也是分层思想的体现。
这个工厂接口非常简单,实现了 Bean 工厂的分层。这个工厂接口也是继承自 BeanFacotory
,也是一个二级接口,相对于父接口,它只扩展了一个重要的功能(工厂分层
)。
AutowireCapableBeanFactory
自动装配的 Bean 工厂
- 组件扫描:自动发现应用容器中需要创建的 Bean, 在指定范围内找出被
@Controller
,@Service
这些注解标签标记的 Bean。 - 自动装配:自动满足 Bean 之间的依赖,指的就是 Spring 的依赖注入功能, 对被
@Autowired
标记的标签进行自动注入。
这个工厂接口继承自 BeanFacotory
,它扩展了自动装配的功能,根据类定义 BeanDefinition
装配 Bean
、执行前、后处理器等。
ConfigurableBeanFactory
ConfigurableBeanFactory 同时继承了 HierarchicalBeanFactory
和 SingletonBeanRegistry
这两个接口,即同时继承了分层和单例类注册的功能。并额外独有 30 多个方法, 这 30 个方法包含了工厂创建、注册一个 Bean 的众多细节。
ConfigurableListableBeanFactory
集大成的接口, 它整合了 BeanFactory
体系的所有二级接口, 扩展之后,加上自有的这 8 个方法。
DefaultListableBeanFactory
它是真正第一个可以独立运行的 IoC 容器, 它实现了 ConfigurableListableBeanFactory
, 以及 BeanDefinition
接口,其中 BeanDefinitionMap
成员变量, 该成员变量是存储容器当中所有注册过了的 BeanDefinition
实例的载体。