Spring框架和Spring boot有啥区别?

18-08-11 banq
         

首先看看Spring, 它是一个IOC框架,或者称依赖注入DI框架,又是一个AOP框架。这里就不多讲这些特性了,spring框架还有更多其他特性,有二十个模块,能解决很多问题:

Spring JDBC

Spring MVC

Spring AOP

Spring ORM

Spring JMS

Spring Test

Spring Expression Language (SpEL)

spring框架虽然没有自己的ORM,但是很好地集成了 Hibernate, Apache iBATIS等等。

Spring MVC提供了界面的MVC实现,使得WEB开发非常方便。

既然Spring解决了这么多问题,那么为什么我们还需要 Spring Boot?

我们看看实际中开发具有所有功能的完整Spring应用程序时所面临的问题, 设置Hibernate Datasource、实体管理器、会话工厂和事务管理有很多困难。对于一个开发人员来说,使用SpringMVC建立一个基本项目需要花费大量的时间,而且实现的功能最少。

  <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>

<p>

当我们使用 Hibernate, 需要配置 datasource, 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"/>
 
<p>

SpringBoot如何解决这个问题?

Spring Boot自动配置所需的所有内部依赖关系,我们只要运行应用程序即可。

1.如果spring的jar包在类路径classpath中,SpringBoot将自动配置Dispatcher servlet。如果Hibernate的jar包在类路径,它将自动配置数据源。

2.SpringBoot为我们提供了一组预先配置好的启动项目,这些项目将作为依赖项添加到我们的项目中。

在web应用程序开发过程中,我们需要使用JAR包,并确定要使用的JAR版本,以及如何将它们连接在一起。所有Web应用程序都有类似的需求,例如SpringMVC、JacksonDatabind、Hibernate核心和Log4j(用于日志记录)。因此,我们不得不保持所有这些JAR版本兼容。

spring boot为了降低这些复杂性,引入了 Spring Boot Starter

starter是一组方便的依赖项,可以在SpringBoot应用程序中包含这些依赖项。为了使用Spring和Hibernate,我们只需在项目中包含Spring-boot-starter-data-jpa依赖项。

下面是启动spring web项的配置,可以实现RESTful风格API。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<p>

下图显示了这一个依赖加入的所有依赖包:


一旦所需的这些依赖包加入maven的配置pom.xml,作为开发人员,我们就不需要担心这些依赖项及其版本兼容性问题。

下面是常用的starter项目依赖包,如果你要使用相应功能,只要加入相应的starter名称到pom.xml中即可,如果需要使用到配置或数据库连接,也只要在项目的application.properties或yaml中配置即可,项目启动时会自动在类路径中发现这两个配置文件并读取配置内容注入相应的类中。

spring-boot-starter-web-services: SOAP Web Services

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安全实现验证和授权。

spring-boot-starter-data-jpa: Spring Data JPA with Hibernate

spring-boot-starter-cache: 激活 Spring Framework的缓存支持

spring-boot-starter-data-rest: 使用 Spring Data REST暴露简单的 REST 服务,

原文