Spring Framework 5.0 入門篇

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 模塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愧旦,一起剝皮案震驚了整個(gè)濱河市世剖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笤虫,老刑警劉巖旁瘫,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異琼蚯,居然都是意外死亡酬凳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門遭庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宁仔,“玉大人,你說我怎么就攤上這事峦睡◆嵘唬” “怎么了权埠?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煎谍。 經(jīng)常有香客問我攘蔽,道長,這世上最難降的妖魔是什么呐粘? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任满俗,我火速辦了婚禮,結(jié)果婚禮上事哭,老公的妹妹穿的比我還像新娘漫雷。我一直安慰自己,他們只是感情好鳍咱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布降盹。 她就那樣靜靜地躺著,像睡著了一般谤辜。 火紅的嫁衣襯著肌膚如雪蓄坏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天丑念,我揣著相機(jī)與錄音涡戳,去河邊找鬼。 笑死脯倚,一個(gè)胖子當(dāng)著我的面吹牛渔彰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播推正,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恍涂,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了植榕?” 一聲冷哼從身側(cè)響起再沧,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尊残,沒想到半個(gè)月后炒瘸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寝衫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年顷扩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慰毅。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隘截,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情技俐,我是刑警寧澤乘陪,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站雕擂,受9級(jí)特大地震影響啡邑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜井赌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一谤逼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仇穗,春花似錦流部、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耘子,卻和暖如春果漾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谷誓。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工绒障, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捍歪。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓户辱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糙臼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庐镐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容