欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中資源加載的方法及Spring的ResourceLoader應(yīng)用小結(jié)

 更新時(shí)間:2024年01月06日 12:01:37   作者:冷風(fēng)扇666  
在Java開發(fā)中,資源加載是一個(gè)基礎(chǔ)而重要的操作,這篇文章主要介紹了深入理解Java中資源加載的方法及Spring的ResourceLoader應(yīng)用,本文通過(guò)實(shí)例代碼演示了通過(guò)ClassLoader和Class獲取資源的內(nèi)容,以及使用Spring的ResourceLoader加載多個(gè)資源的過(guò)程,需要的朋友可以參考下

在Java開發(fā)中,資源加載是一個(gè)基礎(chǔ)而重要的操作。本文將深入探討Java中兩種常見的資源加載方式:ClassLoader的getResource方法和Class的getResource方法,并介紹Spring框架中的ResourceLoader的應(yīng)用。

1. 資源加載的兩種方式

1.1 ClassLoader的getResource方法

URL resourceFromClass = classLoader.getResource("demo.txt");

ClassLoadergetResource方法是通過(guò)當(dāng)前類的ClassLoader實(shí)例來(lái)加載資源。路徑是相對(duì)于classpath的,可以輕松獲取單個(gè)資源。需要注意的是,路徑不要以"/"開頭,否則可能返回null。

1.2 Class的getResource方法

URL resourceFromClassWithPath = aClass.getResource("dir/demo.txt");

ClassgetResource方法通過(guò)當(dāng)前類來(lái)加載資源,路徑是相對(duì)于當(dāng)前類所在的包。如果資源名以"/"開頭,會(huì)以classpath為基準(zhǔn)路徑加載資源。這種方式可以方便地獲取當(dāng)前類包內(nèi)的資源。

2. 獲取批量資源

Enumeration<URL> resources = classLoader.getResources("META-INF/MANIFEST.MF");

通過(guò)ClassLoadergetResources方法,可以獲取指定路徑下的所有資源,返回一個(gè)Enumeration對(duì)象。這對(duì)于需要處理多個(gè)配置文件或元數(shù)據(jù)文件的場(chǎng)景非常有用。

3. Spring的ResourceLoader和ResourcePatternResolver

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] springResources = resolver.getResources("classpath:/spring/*.xml");

Spring框架提供了ResourceLoaderResourcePatternResolver接口,封裝了資源加載的方法。在上述代碼中,通過(guò)PathMatchingResourcePatternResolver實(shí)例,可以使用通配符獲取classpath下的所有xml文件。這對(duì)于加載多個(gè)配置文件非常方便。

4. 完整示例

package com.lfsun.resources;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
public class MyResource {
    public static void main(String[] args) throws Exception {
        // 獲取單個(gè)資源
        // 獲取當(dāng)前類的Class對(duì)象
        Class<MyResource> aClass = MyResource.class;
        // 獲取當(dāng)前類的ClassLoader
        ClassLoader classLoader = aClass.getClassLoader();
        // 使用ClassLoader獲取資源,路徑相對(duì)于classpath
        URL resourceFromClass = classLoader.getResource("demo.txt");
        // 使用Class獲取資源,路徑相對(duì)于當(dāng)前類所在的包
        URL resourceFromClassWithPath = aClass.getResource("dir/demo.txt");
        // 輸出資源內(nèi)容
        if (resourceFromClass != null) {
            byte[] bytes = readBytesFromStream(resourceFromClass.openStream());
            System.out.println("ClassLoader獲取的資源內(nèi)容: " + new String(bytes));
        }
        if (resourceFromClassWithPath != null) {
            byte[] bytes = readBytesFromStream(resourceFromClassWithPath.openStream());
            System.out.println("Class獲取的資源內(nèi)容: " + new String(bytes));
        }
        // 獲取批量資源
        Enumeration<URL> resources = classLoader.getResources("META-INF/MANIFEST.MF");
        while (resources.hasMoreElements()) {
            URL manifestResource = resources.nextElement();
            System.out.println("Manifest資源: " + manifestResource);
        }
        // 使用Spring的ResourceLoader和ResourcePatternResolver
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 使用通配符獲取classpath下的所有xml文件
        Resource[] springResources = resolver.getResources("classpath:/spring/*.xml");
        // 輸出Spring資源內(nèi)容
        for (Resource springResource : springResources) {
            InputStream stream = springResource.getInputStream();
            byte[] bytes = readBytesFromStream(stream);
            System.out.println("Spring資源內(nèi)容: " + new String(bytes));
        }
    }
    private static byte[] readBytesFromStream(InputStream stream) throws IOException {
        StringBuilder buffer = new StringBuilder();
        byte[] bytes = new byte[1024];
        int bytesRead;
        while ((bytesRead = stream.read(bytes)) != -1) {
            buffer.append(new String(bytes, 0, bytesRead));
        }
        return buffer.toString().getBytes();
    }
}

輸出:

D:\Config\java-17\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2023.2.4\lib\idea_rt.jar=62858:D:\Program Files\JetBrains\IntelliJ IDEA 2023.2.4\bin" -Dfile.encoding=UTF-8 -classpath D:\Users\Administrator\IdeaProjects\lfsun-study-java17\lfsun-study-resources\target\classes;D:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.1\spring-boot-starter-3.2.1.jar;D:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\3.2.1\spring-boot-3.2.1.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-context\6.1.2\spring-context-6.1.2.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-aop\6.1.2\spring-aop-6.1.2.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-beans\6.1.2\spring-beans-6.1.2.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-expression\6.1.2\spring-expression-6.1.2.jar;D:\Users\Administrator\.m2\repository\io\micrometer\micrometer-observation\1.12.1\micrometer-observation-1.12.1.jar;D:\Users\Administrator\.m2\repository\io\micrometer\micrometer-commons\1.12.1\micrometer-commons-1.12.1.jar;D:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.1\spring-boot-autoconfigure-3.2.1.jar;D:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.2.1\spring-boot-starter-logging-3.2.1.jar;D:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.4.14\logback-classic-1.4.14.jar;D:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.4.14\logback-core-1.4.14.jar;D:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;D:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;D:\Users\Administrator\.m2\repository\org\slf4j\jul-to-slf4j\2.0.9\jul-to-slf4j-2.0.9.jar;D:\Users\Administrator\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-core\6.1.2\spring-core-6.1.2.jar;D:\Users\Administrator\.m2\repository\org\springframework\spring-jcl\6.1.2\spring-jcl-6.1.2.jar;D:\Users\Administrator\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;D:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\2.0.9\slf4j-api-2.0.9.jar com.lfsun.resources.MyResource
ClassLoader獲取的資源內(nèi)容: 這是 demo.txt 的內(nèi)容。

Class獲取的資源內(nèi)容: 這是 dir/demo.txt 的內(nèi)容。

Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot-starter/3.2.1/spring-boot-starter-3.2.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot/3.2.1/spring-boot-3.2.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-context/6.1.2/spring-context-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-aop/6.1.2/spring-aop-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-beans/6.1.2/spring-beans-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-expression/6.1.2/spring-expression-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/io/micrometer/micrometer-observation/1.12.1/micrometer-observation-1.12.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/io/micrometer/micrometer-commons/1.12.1/micrometer-commons-1.12.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.2.1/spring-boot-autoconfigure-3.2.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.2.1/spring-boot-starter-logging-3.2.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/ch/qos/logback/logback-classic/1.4.14/logback-classic-1.4.14.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/ch/qos/logback/logback-core/1.4.14/logback-core-1.4.14.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/slf4j/jul-to-slf4j/2.0.9/jul-to-slf4j-2.0.9.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-core/6.1.2/spring-core-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/springframework/spring-jcl/6.1.2/spring-jcl-6.1.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Users/Administrator/.m2/repository/org/slf4j/slf4j-api/2.0.9/slf4j-api-2.0.9.jar!/META-INF/MANIFEST.MF
Manifest資源: jar:file:/D:/Program%20Files/JetBrains/IntelliJ%20IDEA%202023.2.4/lib/idea_rt.jar!/META-INF/MANIFEST.MF
Spring資源內(nèi)容: <!-- config1.xml -->
<beans>
    <bean id="bean1" class="com.lfsun.resources.entity.Bean1"/>
</beans>

Spring資源內(nèi)容: <!-- config2.xml -->
<beans>
    <bean id="bean2" class="com.lfsun.resources.entity.Bean2"/>
</beans>

Process finished with exit code 0

代碼結(jié)構(gòu):

以上輸出演示了通過(guò)ClassLoader和Class獲取資源的內(nèi)容,以及使用Spring的ResourceLoader加載多個(gè)資源的過(guò)程。

到此這篇關(guān)于深入理解Java中資源加載的方法及Spring的ResourceLoader應(yīng)用的文章就介紹到這了,更多相關(guān)Java 資源加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解JAVA常用的時(shí)間操作【實(shí)用】

    詳解JAVA常用的時(shí)間操作【實(shí)用】

    本文主要介紹了JAVA一些常用的時(shí)間操作,很實(shí)用,相信大家在開發(fā)項(xiàng)目時(shí)會(huì)用到,下面就跟小編一起來(lái)看下吧
    2016-12-12
  • java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法

    java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • springcloud feign調(diào)其他微服務(wù)時(shí)參數(shù)是對(duì)象的問(wèn)題

    springcloud feign調(diào)其他微服務(wù)時(shí)參數(shù)是對(duì)象的問(wèn)題

    這篇文章主要介紹了springcloud feign調(diào)其他微服務(wù)時(shí)參數(shù)是對(duì)象的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 編寫Spring MVC控制器的14個(gè)技巧(小結(jié))

    編寫Spring MVC控制器的14個(gè)技巧(小結(jié))

    這篇文章主要介紹了編寫Spring MVC控制器的14個(gè)技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java編寫猜數(shù)字游戲

    java編寫猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了java編寫猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • springboot使用hibernate validator校驗(yàn)方式

    springboot使用hibernate validator校驗(yàn)方式

    hibernate validator提供了一套比較完善、便捷的驗(yàn)證實(shí)現(xiàn)方式。下面小編給大家介紹下springboot使用hibernate validator校驗(yàn)方式,感興趣的朋友一起看看吧
    2018-01-01
  • mybatis查詢語(yǔ)句揭秘之參數(shù)解析

    mybatis查詢語(yǔ)句揭秘之參數(shù)解析

    這篇文章主要給大家介紹了關(guān)于mybatis查詢語(yǔ)句之參數(shù)解析的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java: 錯(cuò)誤: 無(wú)效的源發(fā)行版18問(wèn)題及解決

    java: 錯(cuò)誤: 無(wú)效的源發(fā)行版18問(wèn)題及解決

    這篇文章主要介紹了java: 錯(cuò)誤: 無(wú)效的源發(fā)行版18問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • mybatis之調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程(Oracle)

    mybatis之調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程(Oracle)

    這篇文章主要介紹了mybatis調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程(Oracle),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn)

    優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn)

    本文主要介紹了優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論