Spring 通过配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实力缓存、生命周期管理、Bean 的实例代理、事件发布、资源装载等高级服务。
BeanFactory
BeanFactory 是类的通用工厂,他可以创建并管理各种类对象。这些可被创建和管理的对象本身并没有什么特别之处,仅是一个 POJO, Spring 称这些被创建和管理的 Java 对象 Bean。
POJO 就是一个简单的 Java 对象,并不继承任何类。
BeanFactory 的功能通过其他接口得到不断拓展,介绍几个拓展的接口
- ListableFactory: 该接口定义了访问容器中 Bean 基本信息的若干方法,如查看 Bean 的个数、获取某一类型 Bean 的配置名、查看容器中是否包括某一 Bean 等。
- HierarchicalBeanFactory: 父子级联 IoC 容器的接口,子容器可以通过接口方法访问容器。
- ConfigurableBeanFactory:这是一个重要的接口,增强了 IoC 容器的可定制性。定义了设置类装载器、属性编辑器、容器初始化后置处理器等方法。
- AutowireCapableBeanFactory: 定义了将容器中的 Bean 按某种规则(如按名字匹配、按类型匹配等)进行自动装配的方法。
- SingletonBeanRegistry: 定义了允许在运行期间向容器注册单实例 Bean 的方法。
- BeanDefinition Registry: Spring 配置文件中的每一个 <Bean> 节点元素在 Spring 容器里通过一个 BeanDefinition 对象表示,它描述了 Bean 的配置信息。而 BeanDefinition Registry 接口提供了向容器手工注册 BeanDefinition 对象的方法。
ApplicationContext
ApplicationContext 由 BeanFactory 派生而来,提供了更多面向实际应用的功能。在 BeanFactory 中,很多功能需要编程的方式实现,而在 ApplicationContext 中则可以通过配置的方式实现。
- ApplicationEventPublisher: 让容器拥有发布上下文事件的功能,包括启动事件,关闭事件等。
- MessageSource: 为应用提供 i18n 国际化消息的功能。
i18n 是指在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要
- ResourcePatternResolver: 所有 ApplicationContext 实现类都实现了类似于 PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文件路径装载 Spring 的配置文件。
- LifeCycle: 该接口提供了 start() 和 stop() 两个方法,主要用于控制异步处理过程。