什么是Spring Boot框架?什么是Spring框架?他們的目標是什么?他們產生的背景是怎樣的,兩者有什么區別,我們應該使用哪個框架進行開發,帶著這樣的疑問,我們開始今天的講解。

Spring框架背景
Spring框架是JAVA最受歡迎的應用程序開發框架之一。Spring的最佳功能是它具有依賴注入(DI)或控制反轉(IOC), 這使我們能夠開發松耦合的應用程序。而且,松耦合的應用程序可以輕松地進行單元測試。 隔壁的php中的Laravel為什么大手歡迎,也是它實現了依賴注入、控制反轉的功能。

依賴注入
考慮下面的示例- 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 中只是簡單地用作需要在自己的BeanFactory(Factory模式的實現)中進行管理的bean。
- @Autowired 在Spring 中僅用于習慣找到該特定類型的正確匹配并將其自動裝配。
因此,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
- Spring MVC
- Spring AOP
- Spring ORM
- Spring JMS
- Spring TEST
- Spring(SpEL)
面向切面的編程(AOP)是Spring框架的另一個強項。面向對象編程中強調的是類,而在AOP中,強調的是面。
例如,如果要在項目,日志記錄等中添加安全性,則可以僅使用AOP并將其作為跨領域的關注點,而不涉及主要業務邏輯。可以在方法調用之后,方法調用之前,方法返回之后或異常發生之后執行任何操作。
Spring框架沒有自己的ORM,但是它提供了與ORM的很好的集成,例如Hibernate,Apache iBATIS等。
簡而言之,我們可以說Spring框架提供了一種分離的方式來開發Web應用程序。借助Spring中的這些概念(例如Dispatcher Servlet,ModelAndView和View Resolver),Web應用程序開發變得容易。
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>
<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解決辦法
- Spring Boot會完成所有使用的工作, 自動配置并且會處理應用程序所需的所有內部依賴關系-您所需要做的就是運行應用程序。如果Spring jar 在類路徑中,則Spring Boot將使用Dispatcher Servlet自動配置 。如果Hibernate jar 在類路徑中,它將自動配置到數據源 。Spring Boot為我們提供了一組預配置的Starter項目,這些項目將作為依賴項添加到我們的項目中。
- 在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>
Starters 是一組方便的依賴項,可以將其包含在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項目有很多軟件包。一旦添加了該啟動程序依賴項,Spring Boot Starter Web就會預先打包所有這些文件。作為開發人員,我們無需擔心這些依賴關系及其兼容版本。
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服務

正是有了Spring Boot,讓我們告別了繁瑣的配置,可以更加快速專注地開發我們的web應用。