Spring,Spring MVC及Spring Boot区别

Spring,Spring MVC及Spring Boot区别 01前言

对于一个Java开发者来说,Spring可谓如雷贯耳,无论是Spring框架,还是Spring引领的IOC,AOP风格,都对后续Java开发产生的深远的影响,同时,Spring社区总能及时响应开发者的需求,推出适应潮流发展的新功能特定;而对于大部分开发者而言,平时接触最多的应该就是Spring MVC以及Spring Boot了,本文将分别对Spring,Spring MVC以及Spring Boot做总体概述,并分析阐述它们各自想要解决的问题,以便初学者能更好的了解Spring及相关概念


02本篇结构

本篇将大致分为下列四个部分


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

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

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

Spring,Spring MVC,Spring Boot 三者比较

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

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


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

 public class WelcomeController {
 private WelcomeService service = new WelcomeServiceImpl();
 @RequestMapping("/welcome")
 public String welcome() {
 return service.retrieveWelcomeMessage();
 }
}


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

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

测试OK后再将代码改回去,这种方式太过于繁琐,且对代码的侵入性很强;

下面看通过Spring的IOC如何实现,首先将WelcomeService交由Spring管理:

<bean name="WelcomeService" class="XXX.XXX.XXX.service.impl.WelcomeServiceImpl"/>

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

public class WelcomeController {
 @Autowired
 private WelcomeService service;
 @RequestMapping("/welcome")
 public String welcome() {
 return service.retrieveWelcomeMessage();
 }
}


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

<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的核心实现机制可参考tiny spring 项目。


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


首先通过配置文件声明Dispatcher Servlet:
 


<servlet>
 <servlet-name>springmvc</servlet-name>
 <servlet-class>com.qgd.oms.web.common.mvc.OmsDispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/applicationContext.xml</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>springmvc</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>


通过配置文件声明servlet详情,如MVC resource,data source,bean等


<mvc:resources mapping="/css/**/*" location="/static/css/" cache-period="21600"/>


<mvc:resources mapping="/js/**/*" location="/static/js/" cache-period="21600"/>


<mvc:resources mapping="/views/**/*.html" location="/static/views/" cache-period="21600"/>


<mvc:resources mapping="/fonts/**/*" location="/static/fonts/"/>


<mvc:resources mapping="/ueditor/**/*" location="/static/js/lib/ueditor/"/>


<mvc:resources mapping="/img/**/*" location="/static/img/"/>


<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">


<property name="driverClassName" value="${jdbc.driver}"/>


<property name="url" value="${jdbc.url}"/>


<property name="username" value="${jdbc.username}"/>


<property name="password" value="${jdbc.password}"/>


<property name="validationQuery" value="${jdbc.validationQuery}"/>


<property name="maxTotal" value="10"/>


<property name="minIdle" value="5"/>


<property name="maxIdle" value="10"/>


<property name="defaultAutoCommit" value="true"/>


<property name="testWhileIdle" value="true"/>


<property name="testOnBorrow" value="true"/>


<property name="poolPreparedStatements" value="true"/>


<property name="maxOpenPreparedStatements" value="50"/>


</bean>


<bean id="configService" class="com.qgd.oms.web.common.service.ConfigService">


<property name="configStore">


<bean class="com.qgd.oms.web.common.service.impl.DbConfigStore">


<property name="dataSource" ref="dataSource"/>


<property name="taskScheduler" ref="defaultScheduler"/>


<property name="refreshInterval" value="30000"/>


</bean>


</property>


</bean>
 



Spring,Spring MVC,Spring Boot 三者比较

其实写到这里,很多读者应该已经清楚,这三者专注的领域不同,解决的问题也不一样;总的来说,Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性地推出了Spring Boot,它遵循约定优于配置,极大降低了Spring使用门槛,但又不失Spring原本灵活强大的功能,下面用一张图来描述三者的关系:


 0
 0
 分享
评论图片
评论