Spring框架和Spring boot有啥區別?

banq發表於2018-08-11
首先看看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 class="indent">

當我們使用 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 class="indent">


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 class="indent">


下圖顯示了這一個依賴加入的所有依賴包:

[img index=1]


一旦所需的這些依賴包加入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 服務,

原文

相關文章