源码解读全文
设计模式
享元模式
DefaultSingletonBeanRegistry,包含实际上的单例池singletonObjects
将单例
Bean保存在map中,相当于cache,用的时候getBean,如果没有则创建,存在则直接获取
模板方法
- Spring的
BeanFactory都是模板方法模式 - Spring的层级接口与实现都是模板方法模式
迭代器模式
populateBean过程中,以键值对的形式获取所有属性PropertyValues
装饰器模式
BeanWrapper封装Bean,并进行增强BeanHolder仅仅封装BeanPropertyValue封装属性名和值,增强了利用反射赋值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注解解析