getResource()を使用したSpring Resourceローダーの例
Springのリソースローダーは、ファイルシステム、クラスパス、またはURLから(テキストファイル、メディアファイル、画像ファイルなど)などのリソースを取得するための非常に一般的なgetResource()メソッドを提供します。 getResource()メソッドはアプリケーションコンテキストから取得できます。
getResource()を使用してテキストファイルをロードする方法を示す例を次に示します。
1. ファイルシステム
Resource resource = appContext.getResource("file:c:\\testing.txt");
2. URLパス
Resource resource =
appContext.getResource("url:http://www.yourdomain.com/testing.txt");
3. クラスパス
Resource resource =
appContext.getResource("classpath:com/example/common/testing.txt");
リソースの場所を指定するだけで、残りはSpringによって処理され、Resourceオブジェクトが返されます。
getResource()メソッドを使用した完全な例。
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リソースローダー(ResourceLoaderAware)
Beanにはアプリケーションコンテキストアクセスがないため、Beanはどのようにリソースにアクセスできますか? 回避策は、ResourceLoaderAwareインターフェイスを実装し、ResourceLoaderオブジェクトのsetterメソッドを作成することです。 SpringはBeanにリソースローダーを実行します。
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構成ファイル
それを実行します
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();
}
}
}
これで、Beanからリソースを取得できます。
結論
このgetResource()メソッドを使用しない場合、ファイルシステムリソースのFileオブジェクト、URLリソースのURLオブジェクトなど、さまざまなソリューションでさまざまなリソースを処理する必要があります。 Springは、この非常に一般的なgetResource()メソッドで本当に良い仕事をしました。それは、リソースを処理するための時間を本当に節約します。