Spring Boot、Spring MVC、Spring:它们有什么区别?

在本文中,您将获得Spring,Spring MVC和Spring Boot的概述,了解它们可以解决什么问题以及在哪里最好地应用它们。您将学到的最重要的事情是,Spring,Spring MVC和Spring Boot不会争夺相同的空间。他们解决了不同的问题,并且很好地解决了这些问题。
Spring框架解决的核心问题是什么?
认真思考。Spring Framework解决了什么问题?
Spring Framework最重要的功能是依赖注入。所有Spring模块的核心是依赖注入或IOC控制反转。
为什么这很重要?因为,如果正确使用DI或IOC,我们可以开发松耦合的应用程序。松耦合的应用程序可以轻松地进行单元测试。
让我们考虑一个简单的例子。
没有依赖注入的示例
考虑下面的示例:WelcomeController依赖WelcomeService来获取欢迎消息。获取WelcomeService的实例在做什么?
WelcomeService service = new WelcomeService();
它正在创建它的一个实例。这意味着它们紧密耦合。例如:如果我在用于WelcomeController的单元测试中为WelcomeService创建一个模拟,如何使WelcomeController使用该模拟?不容易!
@RestController
public class WelcomeController {
private WelcomeService service = new WelcomeService();
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}

依赖注入的相同示例
使用依赖注入,世界看起来要简单得多。您让Spring框架完成艰苦的工作。我们只使用两个简单的注释:@Component和@Autowired。
使用@Component,我们告诉Spring Framework:嘿,这是您需要管理的bean。
使用@Autowired,我们告诉Spring Framework:嘿,找到此特定类型的正确匹配项并自动将其插入。
在下面的示例中,Spring框架将为WelcomeService创建一个bean,并将其自动装配到WelcomeController中。
在单元测试中,我可以要求Spring框架将WelcomeService的模拟自动连接到WelcomeController中。(使用Spring Boot使使用@MockBean轻松实现这一点。但是,这完全是另一回事了!)
@Component
public class WelcomeService {
//Bla Bla Bla
}
@RestController
public class WelcomeController {
@Autowired
private WelcomeService service;
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}

Spring Framework还可以解决什么?
问题1:复制/管道代码
Spring Framework是否会因依赖注入而停止?否。它基于依赖注入的核心概念以及许多Spring模块。
Spring JDBC
春季MVC
春季AOP
春季ORM
春季JMS
春季测试
考虑一下Spring JMS和Spring JDBC。
这些模块是否带来任何新功能?否。我们可以使用J2EE或Java EE来完成所有这一切。那么,这些带来了什么?它们带来简单的抽象。这些抽象的目的是
减少样板代码/减少重复
促进去耦/提高单元可测试性
例如,与传统的JDBC或JMS相比,使用JDBCTemplate或JMSTemplate所需的代码少得多。
问题2:与其他框架的良好集成
Spring Framework的伟大之处在于它不会尝试解决已经解决的问题。它所做的一切就是与提供出色解决方案的框架提供良好的集成。
休眠ORM
iBatis用于对象映射
JUnit和Mockito用于单元测试
Spring MVC框架解决的核心问题是什么?
Spring MVC Framework提供了分离的Web应用程序开发方式。使用诸如Dispatcher Servlet,ModelAndView和View Resolver的简单概念,可以轻松开发Web应用程序。
为什么我们需要Spring Boot?
基于Spring的应用程序有很多配置。
使用Spring MVC时,我们需要配置组件扫描,调度程序servlet,视图解析器,Web jar(用于传递静态内容)等。


/WEB-INF/views/


.jsp


<mvc:resources mapping="/webjars/**" location="/webjars/"/>

下面的代码片段显示了Web应用程序中调度程序servlet的典型配置。

dispatcher

org.springframework.web.servlet.DispatcherServlet


contextConfigLocation
/WEB-INF/todo-servlet.xml

1


dispatcher
/

当我们使用Hibernate / JPA时,我们需要配置数据源,实体管理器工厂,事务管理器等等。






<jdbc:initialize-database data-source=“dataSource”>
<jdbc:script location=“classpath:config/schema.sql” />
<jdbc:script location=“classpath:config/data.sql” />
</jdbc:initialize-database>








<tx:annotation-driven transaction-manager=“transactionManager”/>

问题1:Spring Boot自动配置:我们可以考虑不同吗?
Spring Boot为此带来了新的思维过程。
我们可以为它带来更多情报吗?将spring mvc jar添加到应用程序后,我们可以自动配置一些bean吗?
如果Hibernate jar在类路径中,如何自动配置数据源?
如果Spring MVC jar位于类路径中,如何自动配置Dispatcher Servlet?
将提供一些设置来覆盖默认的自动配置。
Spring Boot着眼于a)CLASSPATH上可用的框架b)应用程序的现有配置。基于这些,Spring Boot提供了使用这些框架配置应用程序所需的基本配置。这称为Auto Configuration。
问题2:Spring Boot Starter项目:围绕着众所周知的模式构建
假设我们要开发一个Web应用程序。
首先,我们需要确定要使用的框架,要使用的框架版本以及如何将它们连接在一起。
所有Web应用程序都有类似的需求。下面列出的是我们在Spring MVC课程中使用的一些依赖项。其中包括Spring MVC,Jackson Databind(用于数据绑定),Hibernate-Validator(用于使用Java Validation API进行服务器端验证)和Log4j(用于记录)。创建本课程时,我们必须选择所有这些框架的兼容版本。

org.springframework
spring-webmvc
4.2.2.RELEASE


com.fasterxml.jackson.core
jackson-databind
2.5.3


org.hibernate
hibernate-validator
5.0.2.Final


log4j
log4j
1.2.17

这是Spring Boot文档关于入门的内容。
入门程序是一组方便的依赖项描述符,您可以在应用程序中包括它们。您可以一站式购买所需的所有Spring和相关技术,而不必遍历示例代码并复制依赖项描述符的粘贴负载。例如,如果要开始使用Spring和JPA进行数据库访问,只需在项目中包括spring-boot-starter-data-jpa依赖项,就可以了。
让我们考虑一个示例启动器:Spring Boot Starter Web。
如果要开发Web应用程序或公开静态服务的应用程序,则可以选择Spring Boot Start Web。让我们使用Spring Initializr使用Spring Boot Starter Web创建一个快速项目。
Spring Boot Starter Web的依赖性

org.springframework.boot
spring-boot-starter-web

以下屏幕快照显示了添加到我们的应用程序中的不同依赖项
1
依赖关系可分为:
春季:核心,bean,上下文,aop
Web MVC :(春季MVC)
Jackson:用于JSON绑定
验证:Hibernate Validator,验证API
嵌入式Servlet容器:Tomcat
日志记录:logback,slf4j
任何典型的Web应用程序都将使用所有这些依赖项。Spring Boot Starter Web预先打包了这些。作为开发人员,我不必担心这些依赖项或它们的兼容版本。
Spring Boot Starter项目选项
从Spring Boot Starter Web中可以看到,启动程序项目可帮助我们快速入门开发特定类型的应用程序。
spring-boot-starter-web-services:SOAP Web服务
spring-boot-starter-web:Web和RESTful应用程序
spring-boot-starter-test:单元测试和集成测试
spring-boot-starter-jdbc:传统JDBC
spring-boot-starter-hateoas:将HATEOAS功能添加到您的服务中
spring-boot-starter-security:使用Spring Security的身份验证和授权
spring-boot-starter-data-jpa:带有Hibernate的Spring Data JPA
spring-boot-starter-cache:启用Spring框架的缓存支持
spring-boot-starter-data-rest:使用Spring Data REST公开简单的REST服务
Spring Boot的其他目标
也有一些技术入门书
spring-boot-starter-actuator:开箱即用地使用高级功能,例如监视和跟踪应用程序
spring-boot-starter-undertow,spring-boot-starter-jetty,spring-boot-starter-tomcat:选择嵌入式Servlet容器的特定选择
spring-boot-starter-logging:使用logback进行记录
spring-boot-starter-log4j2:使用Log4j2进行记录
Spring Boot旨在使生产就绪的应用程序能够快速完成。
执行器:启用应用程序的高级监视和跟踪。
嵌入式服务器集成:由于服务器已集成到应用程序中,因此我需要在服务器上安装单独的应用程序服务器。
默认错误处理
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

发布了98 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/104295322