Spring框架设计模式分析 - Go语言中文社区

Spring框架设计模式分析


在Java web的开发过程中,目前企业级应用程序采用较多的开发框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC来代替Struts)。本文通过阅读Spring的官方手册和源代码来分析Spring创建者的设计理念,主要梳理在使用Spring的过程中遇到的设计模式,以及Spring框架中各个核心组件之间的协同方式。

1.Spring框架简介

Spring框架是目前最流行的企业级开发框架之一,由Rod Johnson创建。Spring作为现在主流的企业级应用开发框架,创建的主要目的是为了解决企业应用开发的复杂性,对一些常用的企业级API提供一致的模型封装。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情,通过轻量级的容器来取代传统的EJB,简化企业应用的开发难度。
Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,Spring框架的架构模式如图1所示。

图1 spring framework构架模式
图1 spring framework构架模式

2.Spring框架中设计模式的应用

Spring框架由多个模块组成,每个模块都有其特定的功能。各模块可以单独存在,也可以和其他一个或多个模块组合实现。为了实现各个模块的功能,创建者在设计Spring的时候采用了多种设计模式,下面文章中主要分析Spring框架中相对比较重要的几个模块所采用的实际模式。

2.1工厂模式(Factory pattern)

(1)定义

工厂模式是GOF23中设计模式之一,属于创建模式的一种。工厂模式可将Java对象的调用者从被调用者的实现逻辑中分离出来,调用者只需关心被调用者必须满足的规则(接口),而不必关心实例的具体实现过程。工厂模式由抽象产品(接口)、具体产品(实现类)、生产者(工厂类)三种角色组成。

(2)Spring中对工厂模式的应用

Spring中在各种BeanFactory以及ApplicationContext创建中都用到了典型的工厂方法模式,BeanFactory的设计原理如图2所示。
Spring Bean的体系结构比较复杂,顶级接口是BeanFactory;BeanFactory共有三个子接口:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory,这三个子接口集成了顶级接口并对BeanFactory的功能进行了增强,称为二级接口;ConfigurableBeanFactory对二级接口HierarchicalBeanFactory进行了再次增强,它还继承了另一个外来的接口SingletonBeanRegistry,可以被称为三级接口;ConfigurableListableBeanFactory是一个更强大的接口,继承了上述的所有接口,称为四级接口。其余的为抽象类,实现了Spring Bean四级接口所定义的所有功能。

BeanFactory的设计原理
图2 BeanFactory的设计原理

2.2代理模式(Proxy pattern)

(1)定义

代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式由抽象角色、代理角色和真实角色三种角色组成。

(2)Spring中代理模式的应用

Spring的Proxy模式主要在Aop的实现中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy,用到了JDK的动态代理模式。Spring中使用代理模式的结构如图3所示。

 Spring使用代理模式的结构
图3 Spring使用代理模式的结构

$Proxy是创建的代理对象,Subject是抽象主题,代理对象是通过InvocationHandler来持有对目标对象的引用。除了实现被代理对象的接口外,还会有org.springframework.aop.SpringProxy和org.springframework.aop.framework.Advised两个接口。

2.3策略模式(Strategy pattern)

(1)定义

策略模式定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。策略模式由抽象策略角色、具体策略角色和环境角色三种角色组成。

(2)Spring中策略模式的应用

Spring中在实例化对象的时候用到Strategy模式,结构如图4所示。Spring中抽象策略实现的核心是AopProxy接口;Cglib2AopProxy和JdkDynamicAopProxy集成了核心接口,分别代表两种策略的实现方式;ProxyFactoryBean代表Spring中的Context角色,它根据条件选择使用Jdk代理方式或者是CGLIB方式;而另外三个类主要是来负责创建具体策略对象;ProxyFactoryBean是通过依赖的方法来关联具体策略对象的,它是通过调用策略对象的getProxy(ClassLoader classLoader)方法来完成操作。

这里写图片描述
图4 Spring策略模式结构示意图

2.总结

本文通过从Spring的几个核心组件入手,试图找出构建Spring框架的骨骼架构,进而分析Spring在设计过程中的一些设计理念。主要分析了Spring构架和实现中所应用的工厂模式、代理模式和策略模式,从中学习到Spring作者的设计思想,对我们以后程序设计能提供一些思路。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013115001/article/details/51773301
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-27 17:41:43
  • 阅读 ( 1083 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢