Spring Resource Loader mit getResource () Beispiel
Der Ressourcenlader von Spring bietet eine sehr generischegetResource()-Methode, um Ressourcen wie (Textdatei, Mediendatei, Bilddatei…) aus dem Dateisystem, dem Klassenpfad oder der URL abzurufen. Sie können die MethodegetResource() aus dem Anwendungskontext abrufen.
Hier ist ein Beispiel, um zu zeigen, wiegetResource() zum Laden einer Textdatei verwendet wird
1. Dateisystem
Resource resource = appContext.getResource("file:c:\\testing.txt");
2. URL-Pfad
Resource resource = appContext.getResource("url:http://www.yourdomain.com/testing.txt");
3. Klassenpfad
Resource resource = appContext.getResource("classpath:com/example/common/testing.txt");
Sie müssen nur den Speicherort der Ressource angeben, und der Spring übernimmt den Rest und gibt Ihnen ein Ressourcenobjekt zurück.
Vollständiges Beispiel mit der MethodegetResource()
.
package com.example.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; public class App { public static void main( String[] args ) { ApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"If-you-have-any.xml"}); Resource resource = appContext.getResource("classpath:com/example/common/testing.txt"); try{ InputStream is = resource.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); }catch(IOException e){ e.printStackTrace(); } } }
Bean Resource Loader (ResourceLoaderAware)
Wie kann eine Bean auf Ressourcen zugreifen, da sie nicht über den Zugriff auf den Anwendungskontext verfügt? Die Problemumgehung besteht darin, die Schnittstelle vonResourceLoaderAwarezu implementieren und eine Setter-Methode für das Objekt vonResourceLoaderzu erstellen. Spring wird den Resource Loader in Ihre Bohne DI.
package com.example.customer.services; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; public class CustomerService implements ResourceLoaderAware { private ResourceLoader resourceLoader; public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } public Resource getResource(String location){ return resourceLoader.getResource(location); } }
Bean Konfigurationsdatei
Starte es
package com.example.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.Resource; import com.example.customer.services.CustomerService; public class App { public static void main( String[] args ) { ApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"}); CustomerService cust = (CustomerService)appContext.getBean("customerService"); Resource resource = cust.getResource("classpath:com/example/common/testing.txt"); try{ InputStream is = resource.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); }catch(IOException e){ e.printStackTrace(); } } }
Jetzt können Sie die Ressourcen aus einer Bohne abrufen.
Fazit
Ohne diese getResource () -Methode müssen Sie mit unterschiedlichen Ressourcen mit unterschiedlichen Lösungen umgehen, z. B. Dateiobjekt für Dateisystemressource, URL-Objekt für URL-Ressource. Spring hat mit dieser super generischengetResource()-Methode wirklich gute Arbeit geleistet. Das spart wirklich Zeit beim Umgang mit Ressourcen.
Quellcode herunterladen
Laden Sie es herunter -Spring-getResource-Example.zip