動力節(jié)點王鶴老師最新springboot3視頻
JDK8-19新增了不少新特性瞧柔,這里我們把實際常用的新特性瓢湃,給大家介紹一下在抛。包括以下幾個方面:
1.Java Record
2.Swich開關表達式
3.Text Block文本塊
4.var 聲明局部變量
5.sealed 密封類
任何時候創(chuàng)建Java類满着,都會創(chuàng)建大量的樣板代碼蟹地,我們可能做如下:
[if !supportLists]·?[endif]每個字段的set授翻,get方法
[if !supportLists]·?[endif]公共的構(gòu)造方法
[if !supportLists]·?[endif]重寫hashCode, toString(), equals()方法
Java Record避免上述的樣板代碼或悲,如下特點:
[if !supportLists]·?[endif]帶有全部參數(shù)的構(gòu)造方法
[if !supportLists]·?[endif]public訪問器
[if !supportLists]·?[endif]toString(),hashCode(),equals()
[if !supportLists]·?[endif]無set,get方法堪唐。沒有遵循Bean的命名規(guī)范
[if !supportLists]·?[endif]final類巡语,不能繼承Record,Record為隱士的final類淮菠。除此之外與普通類一樣
[if !supportLists]·?[endif]不可變類男公,通過構(gòu)造創(chuàng)建Record
[if !supportLists]·?[endif]final屬性,不可修改
[if !supportLists]·?[endif]不能聲明實例屬性合陵,能聲明static成員
IDEA創(chuàng)建新的Maven工程 Lession01-feature
現(xiàn)在能查看控制臺輸出:lisi = Student[id=1001, name=lisi,email=lisi@qq.com, age=20]zhangsan = Student[id=1002, name=zhangsan, email=lisi@qq.com, age=20]lisi.equals(zhangsan) = falselisi.name() = lisizhangsan.name() = zhangsan
Record是Java類速梗,和普通Java類一樣定義方法肮塞。下面定義方法concat,將姓名和年齡一起打印輸出姻锁。我們創(chuàng)建普通的方法concat枕赵,將name和age連接為一個字符串輸出。
Record中添加構(gòu)造方法位隶, 有三種類型的構(gòu)造方法分別:是緊湊的拷窜,規(guī)范的和定制構(gòu)造方法v緊湊型構(gòu)造方法沒有任何參數(shù),甚至沒有括號钓试。v規(guī)范構(gòu)造方法是以所有成員作為參數(shù)v定制構(gòu)造方法是自定義參數(shù)個數(shù)
Java Record是創(chuàng)建不可變類且減少樣板代碼的好方法装黑。Lombok是一種減少樣板代碼的工具。兩者有表面上的重疊部分弓熏×堤罚可能有人會說Java Record會代替Lombok. 兩者是有不同用途的工具。Lombok提供語法的便利性挽鞠,通常預裝一些代碼模板疚颊,根據(jù)您加入到類中的注解自動執(zhí)行代碼模板。這樣的庫純粹是為了方便實現(xiàn)POJO類信认。通過預編譯代碼材义。將代碼的模板加入到class中。Java Record是語言級別的嫁赏,一種語義特性其掂,為了建模而用,數(shù)據(jù)聚合潦蝇。簡單說就是提供了通用的數(shù)據(jù)類款熬,充當“數(shù)據(jù)載體",用于在類和應用程序之間進行數(shù)據(jù)傳輸攘乒。
多個Record可以組合定義贤牛, 一個Record能夠包含其他的Record。我們定義Record為Customer则酝,存儲客戶信息殉簸,包含了Address和PhoneNumber兩個Record。
instanceof 能夠與 Java Record一起使用沽讹。編譯器知道記錄組件的確切數(shù)量和類型般卑。
step1:聲明Person Record,擁有兩個屬性name和agepublic record Person(String name,Integer age) {}
yeild讓switch作為表達式妥泉,能夠返回值
語法變量= switch(value) { case v1:?yield 結(jié)果值; case v2: yield 結(jié)果值椭微;case v3,v4,v5.. yield 結(jié)果值 }
示例:yield返回值,跳出switch塊public static void main(String[] args) {int week = 2;//yield是switch的返回值盲链, yield跳出當前switch塊String memo?= switch (week){case 1: yield "星期日蝇率,休息";case 2,3,4,5,6: yield "工作日";case 7: yield "星期六迟杂,休息";default: yield "無效日期";};
System.out.println("week = " + memo);
}
無需中間變量,switch作為表達式計算本慕,可以得到結(jié)果排拷。yield是表達式的返回值
示例:多表達式,case 與yield 結(jié)合使用
語法:使用三個雙引號字符括起來的字符串."""內(nèi)容"""
例如:String name = """lisi"""; //Error 不能將文本塊放在單行上String name= """lisi20""";? //Error 文本塊的內(nèi)容不能在沒有中間行結(jié)束符的情況下跟隨三個開頭雙引號
String myname= """zhangsan20""";?//正確
文本塊定義要求:v文本塊以三個雙引號字符開始锅尘,后跟一個行結(jié)束符监氢。v不能將文本塊放在單行上v文本塊的內(nèi)容也不能在沒有中間行結(jié)束符的情況下跟隨三個開頭雙引號
三個雙引號字符""" 與兩個雙引號""的字符串處理是一樣的。與普通字符串一樣使用藤违。例如equals() , "==" , 連接字符串(”+“)浪腐, 作為方法的參數(shù)等。
Text Block使用方式與普通字符串一樣顿乒,==议街,equals比較,調(diào)用String類的方法璧榄。
step1:字符串比較與方法public void fun1() {String s1= """lisi""";String s2 = """lisi""";
//比較字符串boolean b1 = s1.equals(s2);System.out.println("b1 = " + b1);
//使用 == 的比較boolean b2 = s1 == s2;System.out.println("b2 = " + b2);
String msg = """hello world""";//字符串方法substringString sub = msg.substring(0, 5);System.out.println("sub = " + sub);}
step2:輸出結(jié)果b1 = trueb2 = truesub = hello
String stripIndent():刪除每行開頭和結(jié)尾的空白String translateEscapes() :轉(zhuǎn)義序列轉(zhuǎn)換為字符串字面量1.2.3.5 轉(zhuǎn)義字符新的轉(zhuǎn)義字符""特漩,表示隱士換行符,這個轉(zhuǎn)義字符被Text Block轉(zhuǎn)義為空格骨杂。通常用于是拆分非常長的字符串文本 涂身,串聯(lián)多個較小子字符串,包裝為多行生成字符串搓蚪。
pring Boot 是目前流行的微服務框架 倡導 約定優(yōu)先于配置” 其設 目的是 用來簡化新 Spring 應用的初始化搭建以及開發(fā)過程蛤售。 Spring Boot 提供了很多核心的功 能,比如自動化配置 starter(啟動器) 簡化 Maven 配置妒潭、內(nèi)嵌 Servlet 容器悍抑、應用監(jiān)控等功能, 讓我們可以快速構(gòu)建企業(yè)級應用程序杜耙。
特性:1.創(chuàng)建獨立的Spring 應用程序。2.嵌入式 Tomcat拂盯、 Jetty佑女、 Undertow容器(jar)3.提供的 starters 簡化構(gòu)建配置(簡化依賴管理和版本控制)4.盡可能自動配置 spring應用和第三方庫5.提供生產(chǎn)指標,例如指標、健壯檢查和外部化配置6.沒有代碼生成谈竿,無需XML配置
SpringBoot同時提供“開箱即用”团驱,“約定優(yōu)于配置”的特性。
開箱即用:Spring Boot應用無需從0開始空凸,使用腳手架創(chuàng)建項目嚎花。基礎配置已經(jīng)完成呀洲。 集成大部分第三方庫對象紊选,無需配置就能使用啼止。例如在Spring Boot項目中使用MyBatis”眨可以直接使用XXXMapper對象献烦, 調(diào)用方法執(zhí)行sql語句。約定優(yōu)于配置:Spring Boot定義了常用類卖词,包的位置和結(jié)構(gòu)巩那,默認的設置。代碼不需要做調(diào)整此蜈,項目能夠按照預期運行即横。比如啟動類在根包的路徑下,使用了@SpringBooApplication注解裆赵。 創(chuàng)建了默認的測試類东囚。controller, service顾瞪,dao應該放在根包的子包中舔庶。application為默認的配置文件。腳手架(spring提供的一個web應用陈醒,幫助開發(fā)人員惕橙,創(chuàng)建springboot項目)SpringBoot3 最小jdk17, 支持17-20.
Spring Boot理念“約定優(yōu)于配置”钉跷,也可稱為按約定編程
Spring框架:Spring Boot創(chuàng)建的是Spring應用弥鹦,對于這點非常重要。也就是使用Spring框架創(chuàng)建的應用程序爷辙。這里的Spring是指 Spring Framework彬坏。 我們常說的Spring,一般指Spring家族膝晾,包括Spring Boot栓始、Spring Framework 、Spring Data 血当,Spring Security,Spring Batch , Spring Shell, Spring for Apache Kafka ....幻赚。
2004年3月,Spring Framework1.0發(fā)布臊旭。2006年10 月落恼,Spring Framework2.0發(fā)布。2006年后開始离熏,國內(nèi)項目漸漸的開始應用Spring框架佳谦,2009年12月,Spring3.0發(fā)布滋戳。這時國內(nèi)已經(jīng)比較注重Spring使用了钻蔑。項目多數(shù)轉(zhuǎn)移到Spring框架了啥刻。 我是在2007開始知道漸漸了解Spring框架。 那個時候用Struts或者就是jsp+servlet+jdbc比較多矢棚。當時研發(fā)項目也沒什么煩惱郑什, 就一,兩個技術可以用蒲肋。沒什么可選擇的∧⒄現(xiàn)在的框架,技術太多了兜粘。2017 年 09 月申窘,Spring Framework5.0 發(fā)布。 2022年11月Spring Framework6.0發(fā)布孔轴。Spring的核心功能:IoC , AOP , 事務管理剃法,JDBC,SpringMVC 路鹰, Spring WebFlux,集成第三方框架MyBatis,Hibernate, Kafka , 消息隊列...Spring包含SpringMVC贷洲, SpringMVC作為web開發(fā)的強有力框架,是Spring中的一個模塊晋柱。
首先明確一點优构,Spring Boot和Spring Framework都是創(chuàng)建的Spring應用程序。Spring Boot 是一個新的框架雁竞,看做是Spring 框架的擴展钦椭,它消除了設置 Spring 應用程序所需的 XML配置,為更快碑诉,更高效的創(chuàng)建Spring應用提供了基礎平臺彪腔。Spring Boot能夠快速創(chuàng)建基于Spring ,SpringMVC的普通應用以及Web項目进栽。
SpringBoot是包含了Spring 德挣、SpringMVC的高級的框架,提供了自動功能快毛,短平快盲厌。能夠更快的創(chuàng)建Spring應用。消除了Spring的XML配置文件祸泪,提供了開發(fā)效率,消除Spring應用的臃腫建芙。避免了大量的樣板代碼没隘。
項目規(guī)模大,服務多禁荸。要構(gòu)建大型的分布式應用右蒲,保證應用的穩(wěn)定阀湿,高效,不間斷的提供服務瑰妄。Spring Cloud是對分布式項目提供了陷嘴,有力的支持。Spring Cloud是一系列框架的有序的組合间坐,為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中常用工具(例如灾挨,配置管理、服務發(fā)現(xiàn)竹宋、斷路器劳澄、智能路由、微代理蜈七、控制總線秒拔、一次性令牌、全局鎖飒硅、領導選舉砂缩、分布式會話、集群狀態(tài))三娩。開發(fā)人員使用使用Spring Cloud這套框架和工具的集合可以快速建立實現(xiàn)分布式服務庵芭。這些框架需要使用Spring Boot作為基礎開發(fā)平臺。
腳手架是一種用在建筑領域的輔助工具尽棕,是為了保證建筑施工過程順利進行而搭設的工作平臺喳挑。軟件工程中的腳手架是用來快速搭建一個小的可用的應用程序的骨架,將開發(fā)過程中要用到的工具滔悉、環(huán)境都配置好伊诵,同時生成必要的模板代碼。腳手架輔助創(chuàng)建程序的工具回官,Spring Initializr是創(chuàng)建Spring Boot項目的腳手架曹宴。快速建立 Spring Boot項目的最好方式歉提。他是一個web應用笛坦,能夠在瀏覽器中使用。IDEA中繼承了此工具苔巨,用來快速創(chuàng)建Spring Boot項目以及Spring Cloud項目版扩。
一個工程一個模塊的完整功實現(xiàn)。創(chuàng)建學生模塊功能的Spring Boot項目Lession04-singlecom.example.模塊名稱+----Application.java 啟動類+----controller?控制器包---StudentController.java---ScoreController.java+----service 業(yè)務層包---inter 業(yè)務層接口---impl 接口實現(xiàn)包+----repository 持久層包+----model 模型包---entity 實體類包---dto ? 數(shù)據(jù)傳輸包---vo ? ?視圖數(shù)據(jù)包
一個Spring Boot中多個模塊侄泽。在根包下創(chuàng)建每個模塊的子包礁芦, 子包中可以按“單一模塊”包結(jié)構(gòu)定義。創(chuàng)建包含多個功能的單體Spring Boot。 Lession05-crm (activity, sale, customer等模塊)
pom.xml中的指定spring-boot-starter-parent作為坐標柿扣,表示繼承Spring Boot提供的父項目肖方。從 spring-boot-starter-parent 繼承以獲得合理的默認值和完整的依賴樹,以便快速建立一個Spring Boot項目未状。 父項目提供以下功能:
[if !supportLists]·?[endif]JDK的基準版本俯画,比如<java.version>17</java.version>
[if !supportLists]·?[endif]源碼使用UTF-8 格式編碼
[if !supportLists]·?[endif]公共依賴的版本
[if !supportLists]·?[endif]自動化的資源過濾:默認把src/main/resources目錄下的文件進行資源打包
[if !supportLists]·?[endif]maven的占位符為‘@’
[if !supportLists]·?[endif]對多個Maven插件做了默認配置,如maven-compile-plugin司草,maven-jar-plugin
快速創(chuàng)建Spring Boot項目艰垂,同時能夠使用父項目帶來的便利性,可以采用如下兩種方式:1.在項目中翻伺,繼承spring-boot-starter-parent2.pom.xml不繼承材泄,單獨加入spring-boot-dependencies依賴。
應用程序=?代碼 ?+ 數(shù)據(jù)(數(shù)據(jù)庫吨岭,文件拉宗,url)應用程序的配置文件:Spring Boot允許在代碼之外,提供應用程序運行的數(shù)據(jù)辣辫,以便在不同的環(huán)境中使用相同的應用程序代碼旦事。避免硬編碼,提供系統(tǒng)的靈活性急灭〗愀。可使用各種外部配置源,包括Java屬性文件葬馋、YAML文件卖鲤、環(huán)境變量和命令行參數(shù)。項目中經(jīng)常使用properties與yaml文件畴嘶,其次是命令行參數(shù)