09-Spring图解

1. Spring加载配置文件

image-20230102210452827
  1. internalConfigurationAnnotationProcessor => ConfigurationClassPostProcessor
  2. internalAutowiredAnnotationProcessor => AutowiredAnnotationBeanPostProcessor
  3. internalCommonAnnotationProcessor => CommonAnnotationBeanPostProcessor
  4. internalEventListenerProcessor => EventListenerMethodProcessor
  5. internalEventListenerFactory => DefaultEventListenerFactory
  6. internalAutoProxyCreator => AspectJAwareAdvisorAutoProxyCreator

2. 执行BFPP

image-20230102222846268

3. ConfigurationClassPostProcessor

image-20230103150223170

4. registerBPP

image-20230103213717672

1. 常用BPP

  • ApplicationContextAwareProcessor
  • ApplicationListenerDetector
  • AutowiredAnnotationBeanPostProcessor => @Autowired, @Value
  • CommonAnnotationBeanPostProcessor => @Resource
  • InitDestroyAnnotationBeanPostProcessor => @PostConstruct, @PreDestroy
  • AbstractAutoProxyCreator => AspectJAwareAdvisorAutoProxyCreator => AOP

5. populateBean

image-20230104153200786

6. AOP

image-20230105111234268

7. TX

image-20230105215649617

8. Design_pattern

把整个流程框架梳理清楚之后,设计模式自然而然就体会到了,模仿源码

  1. 责任链:使用AOP在进行通知调用
  2. 工厂模式:BeanFactory, proxyFactory
  3. 适配器模式:通知Adapter,AdvisorAdapter
  4. 代理模式:使用cglib, jdk进行动态代理
  5. 模板方法:postProcessBeanFactory(), onRefresh(), initPropertySources()
  6. 观察者模式:监听器、监听事件、广播器(多播器)
  7. 单例模式:Spring中所有的bean对象默认都是单例的
  8. 原型模式:可以通过作用域的方式来改变bean为prototype
  9. 策略模式:
    • ClassPathXmlApplicationContext
    • FileSystemApplicationContext
    • XmlBeanDefinitionReader
    • PropertiesBeanDefinitionReader
    • 实例化策略(simple, cglib)
  10. 构建者模式:BeanDefinitionBuilder
  11. 访问者模式:BeanDefinitionVisitor
  12. 装饰者模式:BeanWrapper
  13. 委托者模式:BeanDefinitionParserDelegate