1.為什么學(xué)習(xí)Spring?
隨著對(duì)Java EE的不斷接觸和理解垢粮,你會(huì)發(fā)現(xiàn)Spring 在各個(gè)企業(yè)和項(xiàng)目中發(fā)揮著越來越重要的作用坟桅。掌握Spring 已成為我們IT行業(yè)生存必學(xué)的本領(lǐng)之一洛勉。
Spring Framework 是一個(gè)開源的Java/Java EE全功能棧(full-stack)的應(yīng)用程序框架,以Apache許可證形式發(fā)布粹胯,也有.NET平臺(tái)上的移植版本。
該框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼辰企,最初由Rod Johnson和Juergen Hoeller等開發(fā)风纠。
Spring Framework提供了一個(gè)簡易的開發(fā)方式,這種開發(fā)方式牢贸,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類竹观。
Spring Framework 當(dāng)前最新版本是Spring Framework 5,當(dāng)你打開官網(wǎng),你應(yīng)該能夠看到官網(wǎng)的宣傳圖片
根據(jù)官網(wǎng)動(dòng)態(tài)和我所了解的信息來看潜索,Spring 官網(wǎng)還會(huì)繼續(xù)支持Spring MVC栈幸,因?yàn)樗€有很多改進(jìn)的地方。
但是未來的趨勢(shì)我認(rèn)為必將是 Spring Boot+ SpringWeb Flux + Spring Cloud.
那么Spring MVC 和 Spring Web Flux 兩者有何區(qū)別呢帮辟?
官網(wǎng)對(duì)此給出了這樣一張對(duì)比圖:
翻譯下就是:
Spring MVC基于servlet API構(gòu)建速址,并使用一個(gè)同步阻塞I / O體系結(jié)構(gòu)和一個(gè)單線程請(qǐng)求線程模型的Web 框架
Spring WebFlux是一個(gè)非阻塞的Web框架,從該組建立起由驹,利用多核芍锚,下一代處理器和大量并發(fā)連接。
總結(jié):
Spring MVC 是基于Servlet API 構(gòu)建的同步阻塞式I/O 的Web 框架蔓榄。
Spring WebFlux 是一種更優(yōu)秀的非阻塞式Web框架并炮,而且能更好處理大量并發(fā)連接。
看到這里甥郑,相信此時(shí)聰明的你應(yīng)該曉得為什么我之前會(huì)那么說了吧逃魄。
2. Spring 官網(wǎng)介紹
Spring 官網(wǎng):https://spring.io/
Spring 文檔:https://spring.io/guides
Spring IDE: https://spring.io/tools/sts
Spring Project: https://spring.io/projects
項(xiàng)目快速生成器:https://start.spring.io/
上面這些鏈接相信很多人都知道,但是其實(shí)往往我們不是很清楚什么時(shí)候用哪個(gè)鏈接澜搅。
Spring 官網(wǎng): 關(guān)注Spring 官網(wǎng)動(dòng)態(tài)伍俘,最新的Spring 技術(shù)和版本發(fā)布公告
Spring 文檔: what you want to do ? 你想開發(fā)一個(gè)什么樣的項(xiàng)目邪锌?可以在這里快速找到相關(guān)介紹和文檔。
Spring IDE: 如果你打算用Eclipse 版本,那么我推薦用 官網(wǎng)這個(gè)STS癌瘾,因?yàn)樗鼞?yīng)該是最友好支持Spring的Eclipse 版本觅丰。當(dāng)然,如果如果條件可以妨退,我還是強(qiáng)烈推薦你使用Intellij Idea.
Spring Project: 這里是按照項(xiàng)目模塊劃分的妇萄,比如 從配置到安全,Web應(yīng)用程序到大數(shù)據(jù)咬荷,想學(xué)習(xí)哪個(gè)就按照分類去學(xué)即可冠句。
項(xiàng)目生成器:這里是Spring 官網(wǎng)提供的一個(gè)非常便利的工具,需要哪些依賴幸乒,哪個(gè)版本懦底,在這里配置下然后下載即可。
3. Spring Framework
Spring Framework核心支持依賴注入逝变,事務(wù)管理,Web應(yīng)用程序奋构,數(shù)據(jù)訪問壳影,消息傳遞,測(cè)試和更多
Tips:這里講述的是翻譯 https://projects.spring.io/spring-framework/ 上面的內(nèi)容
3.1 介紹
Spring框架為現(xiàn)代基于Java的企業(yè)應(yīng)用程序提供了一個(gè)全面的編程和配置模型 - 在任何類型的部署平臺(tái)上弥臼。
Spring的一個(gè)關(guān)鍵元素是應(yīng)用程序級(jí)別的基礎(chǔ)架構(gòu)支持:Spring著重于企業(yè)應(yīng)用程序的“管道”宴咧,以便團(tuán)隊(duì)可以專注于應(yīng)用程序級(jí)業(yè)務(wù)邏輯,而不必與特定部署環(huán)境形成不必要的聯(lián)系径缅。
3.2 功能特點(diǎn)
核心技術(shù):依賴注入掺栅,事件,資源纳猪,i18n氧卧,驗(yàn)證,數(shù)據(jù)綁定氏堤,類型轉(zhuǎn)換沙绝,SpEL,AOP鼠锈。
測(cè)試:模擬對(duì)象闪檬,TestContext框架,Spring MVC測(cè)試购笆,WebTestClient粗悯。
數(shù)據(jù)訪問:事務(wù),DAO支持同欠,JDBC样傍,ORM横缔,編組XML。
Spring MVC和Spring WebFlux Web框架
整合:遠(yuǎn)程處理铭乾,JMS剪廉,JCA,JMX炕檩,電子郵件斗蒋,任務(wù),調(diào)度笛质,緩存泉沾。
語言:Kotlin,Groovy妇押,動(dòng)態(tài)語言跷究。
Tips: 這里加一張官網(wǎng)文檔中的一個(gè)截圖吧,相信有助于你更好地理解敲霍。
3.3 最低要求
JDK 8+ for Spring Framework 5.x
JDK 6+ for Spring Framework 4.x
JDK 5+ for Spring Framework 3.x
Tips: 所以你的電腦現(xiàn)在推薦使用 JDK1.8+
3.4 快速開始
在項(xiàng)目中開始使用spring-framework的推薦方法是使用依賴管理系統(tǒng) - 下面的代碼片段可以復(fù)制并粘貼到您的構(gòu)建中俊马。
需要幫忙? 請(qǐng)參閱我們有關(guān)使用 Maven和 Gradle 構(gòu)建的入門指南肩杈。
其實(shí)不止Spring 官網(wǎng)我們?nèi)缃竦母鞔蠊緫?yīng)該大多數(shù)也推薦我們是用Maven和Gradle 來管理項(xiàng)目Jar包依賴柴我。
如果你使用的Maven:
org.springframework
spring-context
5.1.0.BUILD-SNAPSHOT
spring-snapshots
Spring Snapshots
https://repo.spring.io/libs-snapshot
true
如果你是用的是Gradle
dependencies {
compile 'org.springframework: spring-context:5.1.0.BUILD-SNAPSHOT'
}repositories {
maven {
url 'https://repo.spring.io/libs-snapshot'
}
}
Tips: 其實(shí)我覺得Gradle應(yīng)該是一種比Maven更先進(jìn)的版本依賴管理工具,不過如今各大公司使用Gradle 似乎還不是很多扩然,也許是與因?yàn)镋clipse 對(duì)Gradle 的支持還不夠像Intellij Idea 那么完美吧艘儒。在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群。交流學(xué)習(xí)群號(hào):948368769里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring夫偶,MyBatis界睁,Netty源碼分析,高并發(fā)兵拢、高性能翻斟、分布式、微服務(wù)架構(gòu)的原理说铃,JVM性能優(yōu)化杨赤、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源截汪,目前受益良多
Spring框架包含許多不同的模塊疾牲。 這里我們展示了提供核心功能的spring-context。 有關(guān)其他選項(xiàng)衙解,請(qǐng)參閱右側(cè)的入門指南阳柔。
一旦你使用spring-context依賴關(guān)系設(shè)置你的構(gòu)建,你就可以做到以下幾點(diǎn):
到這里后官網(wǎng)有些不詳細(xì)蚓峦,補(bǔ)充下舌剂。
方法一: 使用STS 工具構(gòu)建這個(gè)帶有Spring-context 上下文的項(xiàng)目
準(zhǔn)備工作:
JDK 1.8
STS IDE
Tips: 下載的時(shí)候有個(gè)坑注意下济锄,如果你的JDK是64位,默認(rèn)直接下載的STS是32位霍转,會(huì)出現(xiàn)這個(gè)錯(cuò)誤荐绝。
所以下載的時(shí)候一定要下載JDK匹配的版本才行,移步:https://spring.io/tools/sts/all
這里下載完成后我們?cè)谖覀兊腎DE空白處避消,右鍵——> New——> Other...
輸入maven 搜索低滩,選擇Maven Project,創(chuàng)建一個(gè)Maven項(xiàng)目
選擇默認(rèn)的工作空間
選擇默認(rèn)的類型
輸入項(xiàng)目基本信息后點(diǎn)擊Finish 完成
然后我們應(yīng)該可以看到這樣的項(xiàng)目結(jié)構(gòu)
首先修改pom.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.xingyun
spring-context-sample
0.0.1-SNAPSHOT
jar
spring-context-sample
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
org.springframework
spring-context
5.1.0.BUILD-SNAPSHOT
spring-snapshots
Spring Snapshots
https://repo.spring.io/libs-snapshot
true
創(chuàng)建文件
package com.xingyun.spring_context_sample.hello;
public interface MessageService {
String getMessage();
}
hello/MessagePrinter.java
package com.xingyun.spring_context_sample.hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MessagePrinter {
final private MessageService service;
@Autowired
public MessagePrinter(MessageService service) {
this.service = service;
}
public void printMessage() {
System.out.println(this.service.getMessage());
}
}
Tips: 注意下這里有個(gè)注解不要忘了
App.java
package com.xingyun.spring_context_sample;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Annotation
ConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.xingyun.spring_context_sample.hello.MessagePrinter;
import com.xingyun.spring_context_sample.hello.MessageService;
@Configuration
@ComponentScan
public class App
{
@Bean
MessageService mockMessageService() {
return new MessageService() {
public String getMessage() {
return "Hello World!";
}
};
}
public static void main( String[] args )
{
ApplicationContext context =
new AnnotationConfigApplicationContext(App.class);
MessagePrinter printer = context.getBean
(MessagePrinter.class);
printer.printMessage();
}
}
Tips: 注意類上有兩個(gè)注解和方法上有一個(gè)注解不要忘了岩喷,類的名字你可以改成官網(wǎng)上的Application 也可以保留默認(rèn)的App名字也行恕沫。
創(chuàng)建成功后項(xiàng)目結(jié)構(gòu)應(yīng)該是這樣,在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群纱意。交流學(xué)習(xí)群號(hào):948368769里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring婶溯,MyBatis,Netty源碼分析偷霉,高并發(fā)迄委、高性能、分布式类少、微服務(wù)架構(gòu)的原理叙身,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系瞒滴。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源曲梗,目前受益良多
當(dāng)然可能你會(huì)看著這種項(xiàng)目結(jié)構(gòu)不舒服赞警,那么你也可以選擇改變下妓忍。
項(xiàng)目結(jié)構(gòu)就變成了這種:
運(yùn)行App.main() 主方法
附錄:核心Jar包依賴關(guān)系
Tips: 如果你不是寫一個(gè)java web Application,那么將不需要spring-web 模塊。