Java-第十五部分-源码解读-Spring中的设计模式

167 阅读2分钟

源码解读全文

设计模式

享元模式

  • DefaultSingletonBeanRegistry,包含实际上的单例池singletonObjects

将单例Bean保存在map中,相当于cache,用的时候getBean,如果没有则创建,存在则直接获取

模板方法

  • Spring的BeanFactory都是模板方法模式
  • Spring的层级接口与实现都是模板方法模式

迭代器模式

  • populateBean过程中,以键值对的形式获取所有属性PropertyValues image.png

装饰器模式

  • BeanWrapper封装Bean,并进行增强
  • BeanHolder仅仅封装Bean
  • PropertyValue封装属性名和值,增强了利用反射赋值
  • InjectionMetadata自动赋值阶段(注解),通过分析所有方法和属性

备忘录模式

  • getBean过程中,用alreadyCreated,记录已经创建的Bean image.png

建造者模式

  • AOP,builder

适配器模式

  • 完成Bean的创建、赋值、初始化后,adaptBeanInstance(name, beanInstance, requiredType);,将BeanObject转为requiredType image.png

桥接模式

  • 工厂创建完成后,需要调用invokeBeanFactoryPostProcessors(beanFactory);进行工厂增强,后置处理的管理者
  1. PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());
  2. PostProcessorRegistrationDelegate连接工厂与工厂增强,Bean与Bean增强,将工厂与工厂增强解耦

外观模式

  • DispathcerServlet,处理所有请求后,进行匹配

组合模式

  • DOM解析Xml,父元素和子元素为组合关系
  • Spring通过组合,为工厂,装配不同的组件,引用分离出来的功能

策略模式

  • 进行Bean初始化时,beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, this);,选择普通构造/代理进行创建
  • 类型转换

命令模式

  • 方法封装都算命令模式

责任链模式

  • AOP
  • BeanPostProcessor,保存所有后置处理器,遍历执行

观察者模式

  • 事件派发器和监听器的组成,调用派发器发送事件,其他监听器就能感知到
  1. IOC容器refresh过程中initApplicationEventMulticaster();registerListeners();
  2. String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);获取所有监听器
  3. 保存在派发器的集合中,getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
  4. 事件派发器进行事件派发时调用multicastEvent,遍历所有的监听器,执行监听方法

解释器模式

  • 解析xml文件过程中的BeanDefinitionParserDelegate,运用了解释器模式,包含了一个标签库,和解析方法,根据不同标签,进行不同的处理 image.png

状态模式

  • Tomcat各种组件都包括状态

继承

  • Spring继承,仅仅是让子类对父类进行功能增强

工具类

  • BeanUtilsBean反射工具
  • ReflectionUtils反射工具类
  • ClassUtils类加载工具
  • PropertiesLoaderUtils资源加载工具
  • AnnotatedElementUtils注解解析