源码解读全文
设计模式
享元模式
DefaultSingletonBeanRegistry
,包含实际上的单例池singletonObjects
将单例
Bean
保存在map
中,相当于cache
,用的时候getBean
,如果没有则创建,存在则直接获取
模板方法
- Spring的
BeanFactory
都是模板方法模式 - Spring的层级接口与实现都是模板方法模式
迭代器模式
populateBean
过程中,以键值对的形式获取所有属性PropertyValues
装饰器模式
BeanWrapper
封装Bean
,并进行增强BeanHolder
仅仅封装Bean
PropertyValue
封装属性名和值,增强了利用反射赋值InjectionMetadata
自动赋值阶段(注解),通过分析所有方法和属性
备忘录模式
getBean
过程中,用alreadyCreated
,记录已经创建的Bean
建造者模式
- AOP,builder
适配器模式
- 完成
Bean
的创建、赋值、初始化后,adaptBeanInstance(name, beanInstance, requiredType);
,将Bean
从Object
转为requiredType
桥接模式
- 工厂创建完成后,需要调用
invokeBeanFactoryPostProcessors(beanFactory);
进行工厂增强,后置处理的管理者
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());
PostProcessorRegistrationDelegate
连接工厂与工厂增强,Bean与Bean增强,将工厂与工厂增强解耦
外观模式
DispathcerServlet
,处理所有请求后,进行匹配
组合模式
DOM
解析Xml
,父元素和子元素为组合关系Spring
通过组合,为工厂,装配不同的组件,引用分离出来的功能
策略模式
- 进行
Bean
初始化时,beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, this);
,选择普通构造/代理
进行创建 - 类型转换
命令模式
- 方法封装都算命令模式
责任链模式
- AOP
BeanPostProcessor
,保存所有后置处理器,遍历执行
观察者模式
- 事件派发器和监听器的组成,调用派发器发送事件,其他监听器就能感知到
- IOC容器
refresh
过程中initApplicationEventMulticaster();
和registerListeners();
String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);
获取所有监听器- 保存在派发器的集合中,
getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
- 事件派发器进行事件派发时调用
multicastEvent
,遍历所有的监听器,执行监听方法
解释器模式
- 解析
xml
文件过程中的BeanDefinitionParserDelegate
,运用了解释器模式,包含了一个标签库,和解析方法,根据不同标签,进行不同的处理
状态模式
Tomcat
各种组件都包括状态
继承
Spring
继承,仅仅是让子类对父类进行功能增强
工具类
BeanUtils
,Bean
反射工具ReflectionUtils
反射工具类ClassUtils
类加载工具PropertiesLoaderUtils
资源加载工具AnnotatedElementUtils
注解解析