一、spring famework 模块解析
二、SpringIOC容器:Core Container: Beans、Core、Context、Expression
三、BeanFactory (该接口定义了容器最基本的功能方法)和 ApplicationContext(对容器提供了更丰富的功能扩展,大部分应用中所使用的基于它实现)
1、BeanFactory
(1)BeanFactory是Spring对IOC容器的最高层抽象
(2)BeanFactory提供各种获取Bean的方法
(3)默认实现:DefaultListableBeanFactory
2、ApplicationContext接口
(1)继承了BeanFactory接口的所有方法
(2)功能更加齐全,支持后处理与事件机制
(3)常用实现:AnnotationConfigApplicationContext
AbstractApplicationContext类承担了主要内容。
3、BeanFactory(bean的注册和获取)和ApplicationContext(更完备的功能)的区别
Feature | BeanFactory | ApplicationContext |
构建实例化Bean容器/读取bean | Y | Y |
生命周期的管理 | N | Y |
BeanPostProcessor自动注册 | N | Y |
BeanFactoryPostProcessor自动注册 | N | Y |
MessageSource支持 | N | Y |
ApplicantionEvent 事件发布 | N | Y |
四、如何定义Bean实例的方法
1、基于xml定义Bean
2、基于注解定义Bean
3、基于Java类,@Configuration定义Bean
五、容器扩展点BeanPostProcessor 和 BeanFactoryPostProcessor(可以通过扩展点实现通用业务逻辑)
1、BeanPostProcessor:在容器初始化Bean的过程中提供干预的扩展
(1)postProcessBeforeInitialization
(2)postProcessAfterInitialization
2、BeanFactoryPostProcessor: 主要用于修改Bean的定义,方法postProcessBeanFactory,晚于BeanDefinitionRegistryPostProcessor执行,每个Bean都要执行一次
3、BeanDefinitionRegistryPostProcessor ,Bean定义注册以后,执行该接口的方法,只执行一次
六、Bean的生命周期Callbacks(对Bean生命周期回调扩展点是否清晰)
1、Spring接口扩展InitializingBean,DisposableBean(销毁Bean),缺点是有入侵,需要引入对应的api
2、基于JSR-250注解@PostConstruct,@PreDestroy(销毁Bean之前),优点是没有入侵,引用自javax.annotation.* 包下的
3、基于Spring xml配置init, destroy方法
4、初始化和销毁的优先级:2 > 1 > 3
七、BeanPostProcessor扩展点总结