学习的目的:
- 深入理解spring的底层,设计思想
- 学习spring这种设计思想,模式
Spring 中文文档: https://github.com/DocsHome/spring-docs/blob/master/pages/core/overview.md
sprig的核心
IOC
AOP
区分BeanFactory与ApplicationContext
| Feature | BeanFactory | ApplicationContext |
|---|---|---|
| Bean Bean实例化/装配 | Yes | Yes |
| 集成的生命周期管理 | No | Yes |
| 自动注册 BeanPostProcessor | No | Yes |
| 自动注册 BeanFactoryPostProcessor | No | Yes |
| 便利的 MessageSource 访问 (国际化) | No | Yes |
| 内置ApplicationEvent 发布机制 | No | Yes |
BeanFactory 仅仅是创建bean
ApplicationContext集成了很多扩展点
扩展点:
- BeanFactoryPostProcessor ```java @Component public class MyBeanPostProcessor implements BeanFactoryPostProcessor {
@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {BeanDefinition beanName = beanFactory.getBeanDefinition("beanName");// 修改 bean的 bean Definition}
}
2. BeanDefinitionRegistryPostProcessor```javapublic class MyBeanDefinitionRegistry implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {registry.registerBeanDefinition("bean",null;);}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {beanFactory.addBeanPostProcessor(null);}}
- **BeanPostProcessor 比较重要
前后9次用到
通过该bean 扩展 完成aop,
**
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return null;}@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return null;}}
getBean方法,比较重要
ApplicationContextAware
获取Context中的属性
IOC的大致流程

