一褒链,簡介
Spring Boot 是所有基于 Spring 開發(fā)的項(xiàng)目的起點(diǎn)。Spring Boot 的設(shè)計(jì)是為了讓你盡可能快的跑起來 Spring 應(yīng)用程序并且盡可能減少你的配置文件姻僧。
SpringBoot 是一個(gè)快速開發(fā)的框架,能夠快速的整合第三方框架,簡化XML配置蒲牧,全部采用注解形式撇贺,內(nèi)置Tomcat容器,幫助開發(fā)者能夠?qū)崿F(xiàn)快速開發(fā),SpringBoot的Web組件 默認(rèn)集成的是SpringMVC框架冰抢。SpringMVC是控制層松嘶。
SpringCloud依賴與SpringBoot組件,使用SpringMVC編寫Http協(xié)議接口挎扰,同時(shí)SpringCloud是一套完整的微服務(wù)解決框架翠订。
二,用IEAD快速搭建一個(gè)Spring Boo項(xiàng)目
第一步遵倦,新建項(xiàng)目
選擇Spring Initializr?尽超,選擇默認(rèn)url,下一步
修改項(xiàng)目信息梧躺,下一步?
勾選上web模板似谁,下一步
設(shè)置好項(xiàng)目名稱和項(xiàng)目位置,點(diǎn)擊完成
項(xiàng)目建好后的目錄結(jié)構(gòu)
l?DemoApplication掠哥,項(xiàng)目主程序巩踏,用于啟動(dòng)項(xiàng)目
l?DemoApplicationTests,一個(gè)空的Junit?測試程序
l?application.properties:一個(gè)空的?properties?文件续搀,可以根據(jù)需要添加
l?pom.xml:?Maven?構(gòu)建說明文件
第二步塞琼,創(chuàng)建HelloController
在com.example.demo?下新建HelloController?類
@RestController 注解,返回內(nèi)容以json格式呈現(xiàn)禁舷。
@RequestMapping 注解彪杉,Spring MVC 控制器方法的映射地址
第三步,啟動(dòng)項(xiàng)目
回到DemoApplication項(xiàng)目主程序榛了,右鍵運(yùn)行“DemoApplication”
項(xiàng)目啟動(dòng)完成在讶,默認(rèn)端口為:8080,我們在瀏覽器中輸入地址:http://127.0.0.1:8080/hello,即可以看到效果
三霜大,SpringBoot整合全局捕獲異常
整個(gè)web項(xiàng)目全局捕獲異常构哺,當(dāng)項(xiàng)目中有錯(cuò)誤通過全局捕獲異常,發(fā)送異常通知。
例子:
第一步曙强,新建demo.example.error 包残拐,創(chuàng)建GlobalExceptionHandler類,貼入代碼
@ExceptionHandler 表示攔截異常碟嘴,RuntimeException.class表示攔截運(yùn)行時(shí)異常
@ControllerAdvice 是 controller 的一個(gè)輔助類溪食,最常用的就是作為全局異常處理的切面類
@ControllerAdvice 可以指定掃描范圍,basePackages掃包范圍
@ControllerAdvice 約定了幾種可行的返回值娜扇,如果是直接返回 model 類的話错沃,需要使用 @ResponseBody 進(jìn)行 json 轉(zhuǎn)換
第二步,創(chuàng)建測試異橙钙埃控制器ErrorController
第三步枢析,啟動(dòng)項(xiàng)目檢驗(yàn)異常捕獲
訪問地址http://127.0.0.1:8080/getUser?i=0
四,集成lombok 讓代碼更簡潔
Lombok?是一種Java?實(shí)用工具刃麸,可用來幫助開發(fā)人員消除 Java 的冗長醒叁,尤其是對于簡單的 Java 對象(POJO)。它通過注解實(shí)現(xiàn)這一目的泊业。
第一步把沼,添加Spring Boot 依賴,在pom.xml中添加如下相關(guān)依賴
<dependency>???<groupId>org.projectlombok</groupId>???<artifactId>lombok</artifactId></dependency>
第二步吁伺,安裝IDEA支持插件饮睬,讓IDEA能夠識別他
在文件,設(shè)置篮奄,plugins续捂,Browse Repostories 中搜索lombok,選擇安裝
第三步,使用lombok
傳統(tǒng)方法需要get和set方法
使用lombok?寫法就很簡單了
或者
常用注解有:
l?@NonNull:給方法參數(shù)增加這個(gè)注解會(huì)自動(dòng)在方法內(nèi)對該參數(shù)進(jìn)行是否為空的校驗(yàn)宦搬,如果為空,則拋出NPE(NullPointerException)
l?@Cleanup:自動(dòng)管理資源劫拗,用在局部變量之前间校,在當(dāng)前變量范圍內(nèi)即將執(zhí)行完畢退出之前會(huì)自動(dòng)清理資源,自動(dòng)生成try-finally這樣的代碼來關(guān)閉流
l?@Getter/@Setter:用在屬性上页慷,再也不用自己手寫setter和getter方法了憔足,還可以指定訪問范圍
l?@ToString:用在類上,可以自動(dòng)覆寫toString方法酒繁,當(dāng)然還可以加其他參數(shù)滓彰,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)調(diào)用父類的toString方法州袒,包含所有屬性
l?@EqualsAndHashCode:用在類上揭绑,自動(dòng)生成equals方法和hashCode方法
l?@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動(dòng)生成無參構(gòu)造和使用所有參數(shù)的構(gòu)造函數(shù)以及把所有@NonNull屬性作為參數(shù)的構(gòu)造函數(shù),如果指定staticName = “of”參數(shù)他匪,同時(shí)還會(huì)生成一個(gè)返回類對象的靜態(tài)工廠方法菇存,比使用構(gòu)造函數(shù)方便很多
l?@Data:注解在類上,相當(dāng)于同時(shí)使用了@ToString邦蜜、@EqualsAndHashCode依鸥、@Getter、@Setter和@RequiredArgsConstrutor這些注解悼沈,對于POJO類十分有用
l?@Value:用在類上贱迟,是@Data的不可變形式,相當(dāng)于為屬性添加final聲明絮供,只提供getter方法衣吠,而不提供setter方法
l?@Builder:用在類、構(gòu)造器杯缺、方法上蒸播,為你提供復(fù)雜的builder APIs,讓你可以像如下方式一樣調(diào)用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();更多說明參考Builder
l?@SneakyThrows:自動(dòng)拋受檢異常萍肆,而無需顯式在方法上使用throws語句
l?@Synchronized:用在方法上袍榆,將方法聲明為同步的,并自動(dòng)加鎖塘揣,而鎖對象是一個(gè)私有的屬性$lock或$LOCK包雀,而java中的synchronized關(guān)鍵字鎖對象是this,鎖在this或者自己的類對象上存在副作用亲铡,就是你不能阻止非受控代碼去鎖this或者類對象才写,這可能會(huì)導(dǎo)致競爭條件或者其它線程錯(cuò)誤
l?@Getter(lazy=true):可以替代經(jīng)典的Double Check Lock樣板代碼
l?@Log:根據(jù)不同的注解生成不同類型的log對象,但是實(shí)例名稱都是log奖蔓,有六種可選實(shí)現(xiàn)類
@CommonsLog?Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Log?Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j?Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2?Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j?Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j?Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
五赞草,@Async異步執(zhí)行方法
EnableAsync注解的意思是可以異步執(zhí)行,就是開啟多線程的意思吆鹤〕恚可以標(biāo)注在方法、類上
第一步疑务,只需要在方法上加上@Async注解沾凄,實(shí)現(xiàn)異步任務(wù)
第二步,在主啟動(dòng)程序上開啟異步?@EnableAsync
第三步知允,構(gòu)造執(zhí)行控制器撒蟀,查看執(zhí)行效果
執(zhí)行結(jié)果
1,4,2,3