在java平常業務開發中咱們常常有可能讀取一些自定義配置或者文件。好比說公私鑰文件、一些固定的詞典文件之類的,這一類統稱爲資源(Resource)。不少狀況下都是本身寫IO來讀取。今天開始你能夠不用在造輪子了。由於Spring自帶有資源加載功能,甚至還有很是便利的方法將讀取的內容注入Spring bean。接下來咱們就來見識一下吧。java
咱們可使用Resource接口簡化資源文件的定位。Spring幫助咱們使用資源加載器查找和讀取資源,資源加載器根據提供的路徑決定選擇哪一個Resource實現。spring
org.springframework.core.io.Resource接口經常使用的有兩個實現類: org.springframework.core.io.ClassPathResource 用來加載classpath下的資源,咱們直接讀取springboot 配置文件 application.properties,其中已經寫入了一個配置 server.port=8080springboot
org.springframework.core.io.FileSystemResource 用來加載系統文件,一般經過文件的絕對或者相對路徑來讀取。上面的例子咱們用這個來試一試。不一樣的是此次咱們須要文件的路徑。app
若是你業務中須要使用延遲加載,咱們可使用類ResourceLoader: 工具
咱們也可使用@Autowired將ResourceLoader注入咱們的bean : spa
根據上圖ApplicationContext 繼承了ResourceLoader 接口。所以咱們能夠經過Spring bean 注入的方式來讀取資源。 server
這種使用方式看上去更Spring,接着往下看,還有更Spring的騷操做。對象
咱們直接使用@Value註解將資源直接注入Spring bean。還有這種操做!不行了!我已經火燒眉毛的要寫幾行試試了:blog
完美無暇!斷言所有正確!不知道能不能讀取圖片。我想也是能夠的,這個留給你本身發掘。可是就這麼結束了嗎?玩一個刺激點的。爲何不直接解析出來並注入對象呢?SpEL(Spring Expression Language)能夠作到這一點。讓咱們來見識一下吧。 2.4 使用SpEL直接解析 爲了展示靈活性,這裏咱們定義本身的解析類。咱們定義了一個讀取配置文件的工具類 cn.felord.mapstruct.util.ResourceReader繼承
兩個方法都是同樣的效果,可是要展示的是不一樣途徑。下面的代碼必須讓它的出場不同凡響:
被註釋掉的代碼一樣管用,你很容易觀察到它們之間的差異。
通過上面的講解,咱們瞭解了Spring去處理資源文件的各類姿式。並且還有直接獲取並裝配資源的方法。相信看了本文以後你會當即拋掉之前的老套作法。
多多關注個人公衆號,有問題能夠留言私信