Spring框架中都用到了哪些设计模式?( 二 )


Spring框架中都用到了哪些设计模式?

文章插图
 
  • Spring AOP集成了AspectJ,AspectJ是Java中最为完整的AOP框架
AspectJ和Spring AOP比较AspectJ
  • AspectJ是编译时增强
  • AspectJ基于字节码操作Bytecode Manipluation实现
  • AspectJ在切面较多的情况下要比Spring AOP的性能强很多
Spring AOP
  • Spring AOP是运行时增强
  • Spring AOP基于代理Proxy实现
  • Spring AOP中集成了AspectJ
  • Spring AOP比较简单,在切面比较少的情况下和AspectJ的性能相似
模板方法模式TemplateMethod
  • 模板方法模式: 是一种行为型模式,基于继承的代码复用 定义一个操作的算法骨架,将一些实现步骤延迟到子类中 模板方法使得子类可以不改变一个算法结构的情况下即可重新定义算法的某些特定步骤的实现方式

Spring框架中都用到了哪些设计模式?

文章插图
 
  • Spring中以Template结尾的类,比如jdbcTemplate等,都是使用了模板方法模式 通常情况下,都是使用继承来实现模板模式 在Spring中,使用了Callback与模板方法相结合的方式,既达到了代码复用的效果,又增加了系统的灵活性
观察者模式Observer
  • 观察者模式: 是一种对象行为模式 表示的是一种对象和对象之间具有依赖关系,当一个对象发生改变,依赖于这个对象的对象也会发生改变
  • Spring事件驱动模型就是基于观察者模式实现的 Spring事件驱动模型可以在很多应用场景中解耦代码 比如每次添加商品时都需要更新商品索引,这时就可以使用观察者模式
Spring事件驱动模型
  • Spring事件驱动模型包含三种角色: 事件Event角色 事件监听者Listener角色 事件发布者Publisher角色
事件角色Event
  • ApplicationEvent: org.springframework.context 事件角色抽象类 继承java.util.Event并实现了java.io.Serializable接口
  • Spring中默认存在以下事件,都是继承自ApplicationContext事件角色抽象类: ContextStartedEvent: ApplicationContext启动后触发的事件 ContextStoppedEvent: ApplicationContext停止后触发的事件 ContextRefreshedEvent: ApplicationContext初始化或者刷新后触发的事件 ContextClosedEvent: ApplicationContext关闭后触发的事件

Spring框架中都用到了哪些设计模式?

文章插图
 
事件监听者角色Listener
  • ApplicationListener: 事件监听者角色 ApplicationListener接口中定义了一个onApplicationEvent() 方法来处理ApplicationEvent. 只要实现onApplicationEvent() 方法即可完成监听事件
【Spring框架中都用到了哪些设计模式?】@FunctionalInterfacepublic interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E event);}复制代码事件发布者角色Publisher
  • ApplicationEventPublisher: 事件发布者角色 ApplicationEventPublisher接口中定义了publishEvent() 方法来发布事件,这个方法在AbstractApplicationContext中实现 在AbstractApplicationContext中,事件是通过ApplicationEventMulticaster广播的
@FunctionalInterfacepublic interface ApplicationEventPublisher { default void publishEvent(ApplicationEvent event) {publishEvent((Object) event); } void publishEvent(Object event);}复制代码Spring事件流程
  • 定义一个事件: 实现一个继承自ApplicationEvent的事件类,并写出相应的构造函数
  • 定义一个事件监听者: 实现ApplicationListener接口 重写onApplicationEvent() 方法
  • 使用事件发布者发布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重写publishEvent() 方法发布消息
  • Spring事件模型示例
适配器模式Adapter
  • 适配器模式: 是结构型模式,也是各种结构型模式的起源 将一个接口转换为调用方需要的接口 适配器使得接口不兼容的类之间可以一起工作.适配器又被称为包装器Wrapper
Spring AOP中的适配器模式