学习的目的:

  1. 深入理解spring的底层,设计思想
  2. 学习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集成了很多扩展点

扩展点:

  1. BeanFactoryPostProcessor ```java @Component public class MyBeanPostProcessor implements BeanFactoryPostProcessor {
  1. @Override
  2. public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
  3. BeanDefinition beanName = beanFactory.getBeanDefinition("beanName");
  4. // 修改 bean的 bean Definition
  5. }

}

  1. 2. BeanDefinitionRegistryPostProcessor
  2. ```java
  3. public class MyBeanDefinitionRegistry implements BeanDefinitionRegistryPostProcessor {
  4. @Override
  5. public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
  6. registry.registerBeanDefinition("bean",null;);
  7. }
  8. @Override
  9. public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
  10. beanFactory.addBeanPostProcessor(null);
  11. }
  12. }
  1. **BeanPostProcessor 比较重要
    前后9次用到
    通过该bean 扩展 完成aop,

**

  1. public class MyBeanPostProcessor implements BeanPostProcessor {
  2. @Override
  3. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  4. return null;
  5. }
  6. @Override
  7. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  8. return null;
  9. }
  10. }

getBean方法,比较重要

ApplicationContextAware

获取Context中的属性

IOC的大致流程


image.png