Spring 中的种设计模式
创建模式:提供对象创建机制,提升代码灵活度并且复用
工厂模式、单列、工厂方法( FactoryBena 接口,里面有 getObject(); )
结构模式: 将类和对象组装较大的机构,保持结构的灵活性
装饰模式、适配器模式、代理模式
行为模式: 负责对象之间的高效沟通和指责委派
观察者、模版方法、策略模式
创建模式
工厂模式
父类中提供一个创建对象的方法,运行子类决定实例化对象的类型。
- 编写代码期间,不确定对象实例的类型的时候可以使用工厂方法
- 考虑到后期代码需要扩展更多的功能的时候
- 需要复用的对象,不需要每次都重新创建
- 例如:数据库连接,网络IO
- Spring 中使用Map 集合来存放所有已经创建好的对象 ConcurrentHashMap
- 通过反射、CFLIB 来实例化
- 提供扩展接口
- BeanPostProcessor
- Initializing Bean
- DisposableBena
BeanFactory 就是IOC中的工厂 顶级父类
The root interface for accessing a Spring bean container. 源码第一句
里面还有完整的 生命周期
单列模式
spring 生命 周期本身只对 单列bean 做完整的生命周期管理。多列bean 在创建完后,便不再托管ioc
整个应用中只有一个可用的实例,控制全局统一的变量或资源
AbstractBeanFactory
此类提供了一个单例缓存(通过其基类DefaultSingletonBeanRegistry单例/原型确定、FactoryBean处理、别名、子bean定义的bean定义合并和bean销毁(org.springframework.beans.factory.DisposableBean接口、自定义销毁方法)。此外,它可以通过实现组织来管理bean工厂层次结构(如果bean未知,则委托给父级)。springframework。工厂HierarchicalBeanFactory接口。
结构模式
装饰模式
在原有功能上进行扩展,在无需修改原有代码的情况下,在运行期间对对象增加额外的功能。
- 在运行时添加或删除对象的功能
- 多个装饰封装对象来组合几种行为
- 单一指责。
TransactionAwareCacheDecorator
处理事务缓存
ServletRequestWrapper
扩展了Request ,
代理模式
spring 中大量使用了代理,AOP、Async、transaction等等,有时候使用不当,会造成一定的冲突,例如:Async,和Transaction一起使用在同一个类上时,会造成代理类,没有@Transcation 注解,非事务方法,调用事务方法,事务失效。@EnableAspectJAutoProxy(exposeProxy = true)
添加在启动类 对外暴露代理对象来解决。
适配器模式
使接口不兼容的对象能够相互合作。
- 当在使用某一个类的时候,接口与代码不兼容的时候,可以使用适配器。通过创建中间层来操作。
这样就是可以实现多种方式创建 controller
- @Controller + @RequestMapping
- 实现 Controller 接口 + xml 配置
- 实现 Servlet 接口 + xml 配置
行为模式
模版模式
RestTemplate 、AsyncRestTemplate 等等
观察者模式
一种订阅机制,在对象事件发生时通知多个观察
此对象的其他对象
策略模式
有些带Handler
的类实现策略模式的效果。
感觉比较 走分支。例如: 登陆接口,带个登陆策略 本地、qq、的属性, 根据接收的不同属性来,选择登陆方式