最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)用,本文通過實(shí)例代碼演示了通過ClassLoader和Class獲取資源的內(nèi)容,以及使用Spring的ResourceLoader加載多個(gè)資源的過程,需要的朋友可以參考下

在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方法是通過當(dāng)前類的ClassLoader實(shí)例來加載資源。路徑是相對于classpath的,可以輕松獲取單個(gè)資源。需要注意的是,路徑不要以"/"開頭,否則可能返回null。

1.2 Class的getResource方法

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

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

2. 獲取批量資源

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

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

3. Spring的ResourceLoader和ResourcePatternResolver

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

Spring框架提供了ResourceLoaderResourcePatternResolver接口,封裝了資源加載的方法。在上述代碼中,通過PathMatchingResourcePatternResolver實(shí)例,可以使用通配符獲取classpath下的所有xml文件。這對于加載多個(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對象
        Class<MyResource> aClass = MyResource.class;
        // 獲取當(dāng)前類的ClassLoader
        ClassLoader classLoader = aClass.getClassLoader();
        // 使用ClassLoader獲取資源,路徑相對于classpath
        URL resourceFromClass = classLoader.getResource("demo.txt");
        // 使用Class獲取資源,路徑相對于當(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):

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

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

相關(guān)文章

  • 詳解Java單元測試之Junit框架使用教程

    詳解Java單元測試之Junit框架使用教程

    單元測試就是針對最小的功能單元編寫測試代碼,Junit是使用Java語言實(shí)現(xiàn)的單元測試框架,它是開源的,Java開發(fā)者都應(yīng)當(dāng)學(xué)習(xí)并使用Junit編寫單元測試。本文就來講講Junit框架的使用教程,需要的可以參考一下
    2022-05-05
  • Java中實(shí)現(xiàn)WebSocket方法詳解

    Java中實(shí)現(xiàn)WebSocket方法詳解

    這篇文章主要介紹了Java中實(shí)現(xiàn)WebSocket方法詳解,WebSocket?是一種新型的網(wǎng)絡(luò)協(xié)議,它允許客戶端和服務(wù)器之間進(jìn)行雙向通信,可以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)交互,需要的朋友可以參考下
    2023-07-07
  • PageHelper中分頁失效的原因分析與正確方法實(shí)踐

    PageHelper中分頁失效的原因分析與正確方法實(shí)踐

    在使用 PageHelper 插件開發(fā)查詢接口時(shí),有時(shí)會(huì)出現(xiàn)分頁失效的情況,下面小編就和大家詳細(xì)講講分頁失效的原因分析與正確方法,希望對大家有所幫助
    2025-11-11
  • Java設(shè)計(jì)模式之抽象工廠模式

    Java設(shè)計(jì)模式之抽象工廠模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之抽象工廠模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    這篇文章主要介紹了JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題,堆和棧得速度性能分析多角度給大家分析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Java訪問修飾符原理及代碼解析

    Java訪問修飾符原理及代碼解析

    這篇文章主要介紹了Java訪問修飾符原理及代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 項(xiàng)目為什么引入log4j而不是logback代碼

    項(xiàng)目為什么引入log4j而不是logback代碼

    這篇文章主要介紹了項(xiàng)目為什么引入log4j而不是logback代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java正則表達(dá)式如何匹配特定html標(biāo)簽內(nèi)的內(nèi)容

    Java正則表達(dá)式如何匹配特定html標(biāo)簽內(nèi)的內(nèi)容

    這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式如何匹配特定html標(biāo)簽內(nèi)的內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java發(fā)郵件錯(cuò)誤javax.net.ssl.SSLHandshakeException:No appropriate protocol問題及解決

    java發(fā)郵件錯(cuò)誤javax.net.ssl.SSLHandshakeException:No appropr

    這篇文章主要介紹了java發(fā)郵件錯(cuò)誤javax.net.ssl.SSLHandshakeException:No appropriate protocol問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例

    java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例

    這篇文章主要介紹了java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09

最新評論

桂东县| 平和县| 广东省| 南充市| 万安县| 军事| 桂东县| 三门县| 临颍县| 湖北省| 柘城县| 河南省| 新余市| 霍州市| 皮山县| 安徽省| 荔波县| 宁津县| 壶关县| 阜南县| 蓝山县| 论坛| 古浪县| 青河县| 乐昌市| 南昌县| 喀什市| 天水市| 沅陵县| 益阳市| 江华| 兴安盟| 庆元县| 栾川县| 宁远县| 桐乡市| 巨野县| 晋江市| 万州区| 定边县| 德江县|