spring資源アクセスResource
jdkのアプリでは、リソースアクセスは基本的にURL類とIOで行われます.まずはjdkのリソースアクセスを紹介します.
j 2 seにおいて、私たちは通常、Class Loaderのget Resource()方法によってリソースを検索する:
J 2 eeでは、Servlet Contectが提供する方法getResource()を使用してリソースにアクセスすることができます.
jndi:/local host/SpringDemo/WEB-INF/config/jdbc.properties
springの資源アクセスは統一インターフェースを提供しています.
springは設計の上で策略のモードを使って、異なった資源に対して訪問して、異なっている実現種類を提供して、常用する実現類はあります:
UrlResource:java.net.URLにアクセスするパッケージ
ServletContect Resource:servlet Contectアクセスリソースのパッケージ
FileSystem Resource:ファイルシステムのリソースのパッケージにアクセスします.
InputStream Resource:フロー操作リソースアクセス
Conttext Resource:このインターフェースは容器資源にアクセスするインターフェースであり、一連のインターフェースを実現するクラスを提供しています.
springでは、アクセスリソースの入り口は、aplicationContectの中で、aplication ContectはResource PatternResoliverインターフェースを継承しました.
リソースにアクセスするときは、リソースにアクセスする方法を指定できます.
j 2 seにおいて、私たちは通常、Class Loaderのget Resource()方法によってリソースを検索する:
public static void main(String[] args) throws IOException, URISyntaxException {
URL url = Thread.currentThread().getContextClassLoader().getResource("format.properties");
Properties p = new Properties();
p.load(url.openStream());
System.out.println(p.get("chengan"));
System.out.println(url.getProtocol());
}
Class Loaderのget Resource()方法は資源にアクセスすることに制限があり、資源の位置はclassipathパスまたはclassipathのサブパスでのみ可能です.format.propertiesファイルのパスがclaspathパスでないと、gets Resource()方法はファイルが見つからないです.たとえば、ウェブプロジェクトを再開発する時、jdbc.propertiesは一般的にWEB-INFの下に新しいファイルを保存しています.ここではClass Loaderを使って取得できません.以下はservlet Contextを使って提供する方法が必要です.getsResource()メソッドパラメータはformat.propertiesを経路として使用できます.方法パラメータの開始経路はクラスパスです.URL url = Thread.currentThread().getContextClassLoader().getResource("test/format.properties");
J 2 eeでは、Servlet Contectが提供する方法getResource()を使用してリソースにアクセスすることができます.
response.setContentType("text/html");
URL url = request.getSession().getServletContext().getResource("/WEB-INF/config/jdbc.properties");
response.getWriter().print(url);
jdbc.propertiesファイルはWEB-INFのconfigファイルの下に置かれています.servlet ConteetのgetsResource方法はWebRootを起点としています.上のコードの運行の結果は以下の通りです.jndi:/local host/SpringDemo/WEB-INF/config/jdbc.properties
springの資源アクセスは統一インターフェースを提供しています.
springは設計の上で策略のモードを使って、異なった資源に対して訪問して、異なっている実現種類を提供して、常用する実現類はあります:
UrlResource:java.net.URLにアクセスするパッケージ
ServletContect Resource:servlet Contectアクセスリソースのパッケージ
FileSystem Resource:ファイルシステムのリソースのパッケージにアクセスします.
InputStream Resource:フロー操作リソースアクセス
Conttext Resource:このインターフェースは容器資源にアクセスするインターフェースであり、一連のインターフェースを実現するクラスを提供しています.
springでは、アクセスリソースの入り口は、aplicationContectの中で、aplication ContectはResource PatternResoliverインターフェースを継承しました.
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
Resource Pattern ResoloverはResource Loaderインターフェースを継承しました.public interface ResourceLoader {
/** Pseudo URL prefix for loading from the class path: "classpath:" */
String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;
Resource getResource(String location);
ClassLoader getClassLoader();
}
リソースにアクセスするときは、リソースにアクセスする方法を指定できます.
public Resource getResource(String location) {
Assert.notNull(location, "Location must not be null");
// CLASSPATH_URL_PREFIX :classpath:
if (location.startsWith(CLASSPATH_URL_PREFIX)) {
return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
}
else {
try {
// Try to parse the location as a URL...
URL url = new URL(location);
return new UrlResource(url);
}
catch (MalformedURLException ex) {
// No URL -> resolve as resource path.
return getResourceByPath(location);
}
}
}
上はResource Loaderの方法get Resource()のデフォルト実装であり、上記のコードから分かるように、リソースの位置を指定する際に、プレフィクスが「classis path:」に指定されている場合は、Class PathResourceを使用します.