spring ioc 体系结构

1. Resouce 体系

org.springframework.core.io.Resource是对资源的抽象, 不同实现类代表了对不同资源的访问策略.

resource

2. ResourceLoader 体系

org.springframework.core.io.ResourceLoader统一处理资源加载过程.
resource-loade

3. BeanFactory 体系

org.springframework.beans.factory.BeanFactory是底层的 IOC 容器, 负责管理BeanDefinition以及 Bean 实例, 默认使用的最终实现类是org.springframework.beans.factory.support.DefaultListableBeanFactory.

beanfactory

4. BeanDefinition 体系

org.springframework.beans.factory.config.BeanDefinition是对 Bean 的抽象

beandefinition

5. BeanDefinitionReader 体系

org.springframework.beans.factory.xml.XmlBeanDefinitionReader负责读取 spring 配置文件内容, 从中解析出 BeanDefinition 对象.

beandefinitionreade

6. ApplicationContext 体系

org.springframework.context.ApplicationContext叫做应用上下文, 是应用层的容器, 内部其实依赖了底层容器BeanFactory去管理 Bean. 相比后者, ApplicationContext做了如下的增强:

  1. 继承org.springframework.context.MessageSource接口, 提供国际化能力
  2. 继承org.springframework.context.ApplicationEventPublisher接口, 提供了应用事件机制
  3. 扩展ResourceLoader, 可以加载多种Resource, 灵活访问不同的资源

applicationcontext

应用扩展点

BeanPostProcessor

包含两个方法, 用于在bean初始化之前/之后(此时bean已经实例化完成)对bean进行自定义处理, 或者直接替换bean(AOP就是在这里对bean进行包装, 进而提供增强能力). 最好实现Ordered接口

1
2
3
4
5
6
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}

BeanFactoryPostProcessor

仅包含一个方法, 用于在bean实例化之前, 对bean的元数据进行自定义配置(BeanFactoryPostProcessor实例除外). 最好实现Ordered接口. PropertySourcesPlaceholderConfigurer就是一个实现类

1
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

虽然技术上可以通过BeanFactoryPostProcessor接口对bean实例进行替换, 但这会导致bean提取实例化, 违反了标准的容器生命周期, 推荐使用BeanPostProcessor接口.

Environment