spring中的设计模式

StaticFactory Method 简单工厂 / 静态工厂

一个工厂类根据传入的参数按照写好的业务逻辑动态进行对象(该对象继承了一个抽象的父类或接口)的创建。这样可以减少很多对象的创建,提高代码质量,同时也方便拓展和维护。

Factory Method 工厂模式

  • BeanFactory:是一种懒汉模式,即使用到某个Bean时才会进行注入和ApplicationContext相比会占用更少的内存,程序启动速度更快
  • ApplicationContext:是一种饿汉模式,容器启动时就创建所有的Bean和BeanFactory相比 ,BeanFactory仅提供了最基本的依赖注入支持 . ApplicationContext扩展了BeanFactory, 除了BeanFactory的功能外还包含其余更多的功能,通常使用ApplicationContext创建BeanApplicationContext的实现类。

Singleton 单例:

一个类仅有一个实例,仅创建一次对象。Spring中的Bean的作用域默认就是单例Singleton的。例如request: 每一次HTTP请求都会创建一个新的Bean实例,该Bean实例仅在当前HTTP request中有效

  • 饿汉模式:通过JVM隔离其他线程,初始化时就创建对象,阻止其他线程创建,例如ApplicationContext
  • 懒汉模式:调用构造方法时才会创建对象(线程安全问题:在多线程的情况下,创建容易发生冲突:第一个线程识别instance为null还未创建时,第二个线程也识别instance为null,此时两个线程创造了两个不同hashCode的对象,所以需要对其加锁来防止这种情况);例如BeanFactory

  • 枚举法

 

Proxy代理模式:

面向切面编程AOP: Aspect-Oriented Programming :面向切面编程能够将和业务无关,但是是业务模块中所共同调用的逻辑或者业务功能封装起来, 比如事务管理,日志管理,权限控制等 有利于减少重复代码,降低模块之间的耦合度,并有利于面向未来的可拓展性和可维护性 使用AOP可以将一些通用功能抽象出来,在需要使用的地方直接使用,这样可以大大简化代码量 需要增加新功能也会更加简单方便,这样可以提高系统的扩展性。

Spring AOP基于动态代理实现:

  • 代理对象实现了接口:Spring AOP会使用Java动态代理JDK Proxy创建代理对象 完成对象的代理操作。
  • 代理对象没有实现接口: Spring AOP会使用Cglib Proxy生成一个被代理对象的子类作为代理类完成对象的代理操作

Adapter适配器:

是结构型模式,也是各种结构型模式的起源 将一个接口转换为调用方需要的接口 适配器使得接口不兼容的类之间可以一起工作.适配器又被称为包装器Wrapper
Spring AOP中的适配器模式:

  • Spring AOP中的增强和通知Advice使用了适配器模式,接口是AdvisorAdapter
  • 常用的Advice类型包括: BeforeAdvice: 前置通知. 目标方法调用前增强 AfterAdvice: 后置通知. 目标方法调用后增强 AfterReturningAdvice: 目标方法执行结束之后 ,return之前
  • 每个通知Advice都有对应的拦截器: BeforeAdvice - MethodBeforeAdviceInterceptor AfterAdvice - MethodAfterAdviceInterceptor AfterReturningAdvice - MethodAfterReturningAdviceInterceptor
  • Spring中预定义的通知要通过对应的适配器,适配成为MethodInterceptor接口类型的对象

Spring MVC中的适配器模式:

  • Spring MVC中 ,DispatchServlet根据请求信息调用HanlderMapping, 解析请求对应的Handler, 解析到对应的Handler后,开始由HandlerAdapter适配器进行处理
  • HandlerAdapter作为期望接口,具体的适配器实现类对具体目标类进行适配 .controller作为需要适配的类
  • 通过使用适配器AdapterHandler可以对Spring MVC中众多类型的Controller通过不同的方法对请求进行处理

Decorator包装器:

动态地给对象添加一些额外的属性或者行为 和继承相比,装饰器模式更加灵活。
当需要修改原有的功能,但是不想直接修改原有的代码,就可以设计一个装饰器Decorator类在原有的代码的外面,这样可以在不修改原有的类的基础上扩展新的功能

  • Spring中配置DataSource时 ,DataSource可以是不同的数据库和数据源.为了在少修改原有类的代码下动态切换不同的数据源,这时就用到了装饰器模式

Observer观察者:

一种对象行为模式 表示的是一种对象和对象之间具有依赖关系。当一个对象发生改变,依赖于这个对象的对象也会发生改变

Spring事件驱动模型就是基于观察者模式实现的 。Spring事件驱动模型可以在很多应用场景中解耦代码 比如每次添加商品时都需要更新商品索引,这时就可以使用观察者模式

Spring事件驱动模型的三种角色:

  • 事件Event角色
  • 事件监听者Listener角色
  • 事件发布者Publisher角色

Spring事件流程:

  1. 定义一个事件: 实现一个继承自ApplicationEvent的事件类,并写出相应的构造函数
  2. 定义一个事件监听者: 实现ApplicationListener接口 重写onApplicationEvent() 方法
  3. 使用事件发布者发布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重写publishEvent() 方法发布消息

Strategy策略:

属于行为型模式,一个类的行为或其算法可以在运行时更改。

创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法

  • Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值