来看看Spring与Spring boot到底有哪些区别

什么是Spring Boot?而且,什么是Spring框架?他们的目标是什么?我们如何比较它们?您的脑海中肯定有很多问题。在此博客的结尾,您将获得所有这些问题的答案。在学习更多有关Spring和Spring Boot框架的知识时,您将了解到每种解决方案都可以解决不同类型的问题。

什么是春天?Spring解决的核心问题是什么?

Spring框架是Java最受欢迎的应用程序开发框架之一。Spring的最佳功能之一是它具有 依赖注入(DI) 控制反转(IOC), 这使我们能够开发松耦合的应用程序。而且,松耦合的应用程序可以轻松地进行单元测试。

没有依赖注入的示例

考虑下面的示例- MyController 取决于 MyService 执行特定任务。因此,要获取MyService的实例,我们将使用:

MyService service = new MyService();

现在,我们为创建了实例 MyService ,我们看到两者紧密耦合。如果MyService 在的单元测试中 创建的模拟 MyController ,如何 MyController 使用该模拟?有点困难-是吗?

@RestController

public class MyController {

private MyService service = new MyService();

@RequestMapping("/welcome")

public String welcome() {

return service.retrieveWelcomeMessage();

}

}

依赖注入的示例
仅需两个注释,我们就可以MyService 轻松获得实例,而实例 并不是紧密耦合的。Spring框架做了所有艰苦的工作,使事情变得更简单。

  • @Component 在Spring Framework中只是简单地用作 需要在自己的BeanFactory(Factory模式的实现)中进行管理的bean。

  • @Autowired 在Spring Framework中仅用于习惯找到该特定类型的正确匹配并自动装配。

因此,Spring框架将为其创建一个bean MyService 并将其自动连接到中 MyController。

在单元测试中,我可以要求Spring框架将的模拟自动关联 MyService 到 MyController 。

@Component

public class MyService {

public String retrieveWelcomeMessage(){

return "Welcome to InnovationM";

}

}

@RestController

public class MyController {

@Autowired

private MyService service;

@RequestMapping("/welcome")

public String welcome() {

return service.retrieveWelcomeMessage();

}

}

Spring框架还有许多其他功能,分为二十个模块以解决许多常见问题。以下是一些比较流行的模块:

  • Spring JDBC

  • 春季MVC

  • 春季AOP

  • 春季ORM

  • 春季JMS

  • 春季测试

  • 春季表达语言(SpEL)

面向方面的编程(AOP)是Spring框架的另一个优势。面向对象编程中的关键单元是,而在AOP中,关键单元是方面。例如,如果要在项目,日志记录等中添加安全性,则可以仅使用AOP并将其作为跨领域的关注点而与主要业务逻辑分开。您可以在方法调用之后,方法调用之前,方法返回之后或异常发生之后执行任何操作。

Spring框架没有自己的ORM,但是它提供了与ORM的很好的集成,例如Hibernate,Apache iBATIS等。

简而言之,我们可以说Spring框架提供了一种分离的方式来开发Web应用程序。借助Spring中的这些概念(例如Dispatcher Servlet,ModelAndView和View Resolver),Web应用程序开发变得容易。

如果Spring可以解决很多问题,为什么我们需要Spring Boot?

现在,如果您已经从事过Spring,请考虑一下在开发具有所有功能的成熟Spring应用程序时遇到的问题。无法提出一个?让我告诉您-设置Hibernate数据源,实体管理器,会话工厂和事务管理非常困难。对于开发人员来说,使用带有最少功能的Spring MVC来建立基本项目会花费很多时间。

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix">

<value>/WEB-INF/views/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

</bean>

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

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/my-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

使用Hibernate时,我们必须配置诸如数据源,EntityManager等之类的东西。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="close">

<property name="driverClass" value="${db.driver}" />

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

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

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

</bean>

<jdbc:initialize-database data-source="dataSource">

<jdbc:script location="classpath:config/schema.sql" />

<jdbc:script location="classpath:config/data.sql" />

</jdbc:initialize-database>

<bean

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"

id="entityManagerFactory">

<property name="persistenceUnitName" value="hsql_pu" />

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

</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

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

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

</bean>

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

Spring Boot如何解决这个问题?

  1. Spring Boot会完成所有使用的工作, AutoConfiguration 并且会照顾您的应用程序所需的所有内部依赖关系-您需要做的就是运行应用程序。如果Spring jar 在类路径中,则Spring Boot将使用Dispatcher Servlet自动配置 。如果Hibernate jar 在类路径中,它将自动配置到数据源 。Spring Boot为我们提供了一组预配置的Starter项目,这些项目将作为依赖项添加到我们的项目中。

  2. 在Web应用程序开发期间,我们将需要使用的jar,使用的jar版本以及如何将它们连接在一起。所有Web应用程序都有类似的需求,例如Spring MVC,Jackson Databind,Hibernate core和Log4j(用于记录)。因此,我们必须选择所有这些jar的兼容版本。为了降低复杂性,Spring Boot引入了我们所谓的Spring Boot Starters。

Spring Web Project的依赖关系

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.2.2.RELEASE</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.5.3</version>

</dependency>

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-validator</artifactId>

<version>5.0.2.Final</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

入门程序是一组方便的依赖项,可以将其包含在Spring Boot应用程序中。对于使用Spring和Hibernate,我们只需要在项目中包括spring-boot-starter-data-jpa依赖项。

Spring Boot Starter Web的依赖性

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

Spring Boot Starter项目选项

这些是很少的入门项目,可帮助我们快速开发特定类型的应用程序。

  • 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服务

推荐阅读更多精彩内容