日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FileEncodingApplicationListener使用以及原理

發(fā)布時(shí)間:2024/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FileEncodingApplicationListener使用以及原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:從本文開始我們會(huì)詳細(xì)講解springboot中一系列的事件監(jiān)聽器的使用以及內(nèi)部實(shí)現(xiàn)原理,本文暫且講解最簡單的一個(gè)監(jiān)聽器,那就是文件編碼監(jiān)聽器-FileEncodingApplicationListener。

FileEncodingApplicationListener類相關(guān)源碼如下:

public class FileEncodingApplicationListener

implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {

private static final Log logger = LogFactory.getLog(FileEncodingApplicationListener.class);

public int getOrder() {

? ?return Ordered.LOWEST_PRECEDENCE;

}

public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {

ConfigurableEnvironment environment = event.getEnvironment();

if (!environment.containsProperty("spring.mandatory-file-encoding")) {

? return;

}

String encoding = System.getProperty("file.encoding");

String desired = environment.getProperty("spring.mandatory-file-encoding");

if (encoding != null && !desired.equalsIgnoreCase(encoding)) {

? ?...

}

}

}

FileEncodingApplicationListener是一個(gè)文件編碼監(jiān)聽器,它實(shí)現(xiàn)了Ordered接口,通過getOrder方法我們可以看出它的執(zhí)行優(yōu)先級(jí)是比較低的(getOrder方法的返回值越小,則執(zhí)行優(yōu)先級(jí)越高)。FileEncodingApplicationListener負(fù)責(zé)監(jiān)聽ApplicationEnvironmentPreparedEvent事件。ApplicationEnvironmentPreparedEvent:環(huán)境事先準(zhǔn)備,spring boot中的環(huán)境已經(jīng)準(zhǔn)備ok

可以通過ApplicationEnvironmentPreparedEvent獲取到SpringApplication、ConfigurableEnvironment等等信息, 可以通過ConfigurableEnvironment實(shí)例對象來修改以及獲取默認(rèn)的環(huán)境信息。

接下來我們重點(diǎn)梳理一下onApplicationEvent方法的處理邏輯。

1?通過event獲取環(huán)境ConfigurableEnvironment 。

2?通過環(huán)境來獲取spring.mandatory-file-encoding變量(所有的配置文件最終都被springboot解析存儲(chǔ)到環(huán)境中),如果不存在該變量,則直接返回。spring.mandatory-file-encoding變量默認(rèn)就沒有設(shè)置,因此我們?nèi)绻麤]有設(shè)置該變量的值,就不會(huì)執(zhí)行下文的邏輯。

3?獲取系統(tǒng)變量file.encoding。獲取spring.mandatory-file-encoding變量。

4?如果spring.mandatory-file-encoding的值(忽略大小寫)與file.encoding的值不相等,則直接報(bào)錯(cuò),直接不讓程序運(yùn)行。比如我們設(shè)置了spring.mandatory-file-encoding=utf-8,file.encoding的值為GBK則報(bào)錯(cuò);如果spring.mandatory-file-encoding=uTF-8,file.encoding的值為utf-8就不會(huì)報(bào)錯(cuò)。因?yàn)楸容^兩者值的時(shí)候已經(jīng)忽略大小寫了。

關(guān)于spring.mandatory-file-encoding屬性的配置步驟如下:

在項(xiàng)目的根目錄中創(chuàng)建application.properties文件,該文件的層級(jí)結(jié)構(gòu)如下圖所示:

?

application.properties文件的內(nèi)容如下:

spring.mandatory-file-encoding=GBK

至此,FileEncodingApplicationListener類的相關(guān)實(shí)現(xiàn)以及原理已經(jīng)講解完畢。


歡迎關(guān)注我的微信公眾號(hào),第一時(shí)間獲得博客更新提醒,以及更多成體系的Java相關(guān)原創(chuàng)技術(shù)干貨。?
掃一掃下方二維碼或者長按識(shí)別二維碼,即可關(guān)注。
?


總結(jié)

以上是生活随笔為你收集整理的FileEncodingApplicationListener使用以及原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。