51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1973|回复: 0
打印 上一主题 下一主题

Spring、Spring Boot与Spring MVC

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-16 14:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-3-8 15:41:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    总论

    Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的ioc和aop。ioc提供了依赖注入的容器,aop解决了面向横切面的编程;然后在此二者的基础上实现了其他延伸产品的高级功能。

    Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题。

    后来因为 Spring 的配置非常复杂,各种XML、 JavaConfig处理起来比较繁琐。于是为了方便开发者使用,从而又推出了Spring BOOT,简化了Spring的配置流程。

    说得更简便一些:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个MVC框架(一些用Spring解耦的组件),用来开发web应用,最终形成了SpringMVC。然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring BOOT。


    Spring MVC的功能

    Spring MVC提供了一种轻度耦合的方式来开发web应用。

    Spring MVC是Spring的一个模块,一个web框架。通过Dispatcher Servlet、ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。


    Spring BOOT的功能

    Spring Boot实现了自动配置,降低了项目搭建的复杂度。

    众所周知Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,使开发者能够更加专注于业务逻辑。

    Spring Boot只是承载者,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。

    对使用者来说,换用Spring Boot以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装Tomcat这类容器服务器了,maven打出jar包直接跑起来就是个网站,但你最核心的业务逻辑实现与业务流程实现没有任何变化。

    所以,用最简练的语言概括就是:

    Spring 是一个“引擎”;

    Spring MVC 是基于Spring的一个 MVC 框架 ;

    Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。


    什么是Spring?它解决了什么问题?

    我们说到Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等,比如基于Spring的项目里经常能看到的Bean,它代表的就是由Spring管辖的对象。

    而在被管理对象与业务逻辑之间,Spring通过IOC(控制反转)架起使用的桥梁,IOC也可以看做Spring最核心最重要的思想,通过IOC能带来什么好处呢?首先来看一个实际开发中的典型应用场景,假设我们有一个基于MVC分层结构的应用,通过controller层对外提供接口,而通过service层提供具体的实现,在service层中有一个WelcomeService服务接口,一般情况下都是通过WelcomeService service = new WelcomeServiceImpl();创建实例并进行调用:

    1. public class WelcomeController {
    2.     private WelcomeService service = new WelcomeServiceImpl();

    3.     @RequestMapping("/welcome")
    4.     public String welcome() {
    5.     return service.retrieveWelcomeMessage();
    6.     }
    7. }
    复制代码

    调用后发现一切正常,此时,功能提交,需要进行测试,而由于实际应用环境与测试环境有所区别,需要替换WelcomeServiceImpl为一个MockWelcomeServiceImpl,以方便测试,怎么办?没有其他办法,只有改代码:

    1. public class WelcomeController {
    2.     private WelcomeService service = new MockWelcomeServiceImpl();

    3.     ...
    4. }
    复制代码

    测试OK后再将代码改回去,这种方式太过于繁琐,且对代码的侵入性很强;
    下面看通过Spring的IOC如何实现,首先将WelcomeService交由Spring管理:

    1. <bean name="WelcomeService" class="XXX.XXX.XXX.service.impl.WelcomeServiceImpl"/>
    复制代码

    然后在业务代码处通过Spring IOC拿到具体对象:

    1. public class WelcomeController {
    2.     @Autowired
    3.     private WelcomeService service;

    4.     @RequestMapping("/welcome")
    5.     public String welcome() {
    6.         return service.retrieveWelcomeMessage();
    7.     }
    8. }
    复制代码

    测试的时候,只需要更改配置文件,将WelcomeService对应的实现改为MockWelcomeServiceImpl即可:

    1. <bean name="WelcomeService" class="XXX.XXX.XXX.service.impl.MockWelcomeServiceImpl"/>
    复制代码

    这种方式对业务代码没有任何侵入,它有效的实现松耦合,大家都知道紧耦合的代码是业务发展的噩梦;同时,Spring IOC提供的远不止这些,如通过单例减少创建无用的对象,通过延迟加载优化初始化成本等

    当然,Spring 的核心功能远不知这些,如:

    • Spring AOP
    • Spring JDBC
    • Spring MVC
    • Spring ORM
    • Spring JMS
    • Spring Test

    其实不通过Spring框架依然可以实现这些功能特定,但是Spring 提供了更优雅的抽象接口以方便对这些功能的组装,同时又给予每个具体实现以灵活的配置;另外,基于Spring,你可以方便的与其他框架进行集成,如hibernate,ibatis等,Spring官方的原则是绝不重复造轮子,有好的解决方案只需要通过Spring进行集成即可。纵览Spring的结构,你会发现Spring Framework 本身并未提供太多具体的功能,它主要专注于让你的项目代码组织更加优雅,使其具有极好的灵活性和扩展性,同时又能通过Spring集成业界优秀的解决方案.


    什么是Spring MVC?它解决了什么问题?

    Spring MVC是Spring的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC框架(一些用Spring 解耦的组件),主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易,一个典型的Spring MVC应用开发分为下面几步:
    首先通过配置文件声明Dispatcher Servlet:

    1. <servlet>
    2.         <servlet-name>springmvc</servlet-name>
    3.         <servlet-class>com.qgd.oms.web.common.mvc.OmsDispatcherServlet</servlet-class>
    4.         <init-param>
    5.             <param-name>contextConfigLocation</param-name>
    6.             <param-value>/WEB-INF/applicationContext.xml</param-value>
    7.         </init-param>
    8.         <load-on-startup>1</load-on-startup>
    9.     </servlet>

    10.     <servlet-mapping>
    11.         <servlet-name>springmvc</servlet-name>
    12.         <url-pattern>/</url-pattern>
    13.     </servlet-mapping>
    复制代码

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-2 06:02 , Processed in 0.061285 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表