リソースの抽象化
org.springframework.core.io.Resource
特長 java.net.URL抽象化. スプリング内部でよく使用されるインタフェース. 抽象化の原因クラスパスでリソースを検索する機能がない .サーブレットContextから相対パス を取得できません.の新しいHandlerを登録して、特別なURL接尾辞を作成することができますが、複雑で便利さに欠けています. 実質的に、内部は資源を使用しています.
インタフェースの参照
継承インタフェース 主な方法
- getInputStream()
- exitst()
- isOpen()
-getDescription():フルパスを含むファイル名または実際のURL インプリメンテーションボディ UrlResource: java.net.URL、デフォルトでサポートされているプロトコルhttp、http、ftp、file、jarを参照してください. ClassPathResource:サポートされているプレフィックスクラスパス: FileSystemResource サーブレットContextResource:Webアプリケーションのルートディレクトリの相対パスでリソースを検索します.(実際、最もよく使われる理由は以下の通りです) ... リソースの取得 Resourceのタイプは、locaion文字列およびApplicationContextのタイプに依存します.(ResourceLoaderもApplicationContextで実施)
- ClassPathXmlApplicationContext -> ClassPathResource
- FileSystemXmlApplicationContext -> FileSystemResource
- WebApplicationContext -> ServletContextResource アプリケーションコンテキストのタイプを考慮せずにリソースタイプを強制するにはjavaを使用します.net.URL接頭辞(+classpath:)のいずれかを使用できます.
- classpath:me/whiteship/config.xml -> ClassPathResource
- file:///some/resource/path/config.xml -> FileSystemResource 検証方法
Resource抽象に関する他のコンテンツは、https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-as-dependenciesにあります.
リファレンスインフラストラクチャ:スプリングフレームキーテクノロジー(白旗線) https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/Resource.html https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-as-dependencies
特長
@Component
public class AppRunner implements ApplicationRunner {
/*
@Autowired
ApplicationContext resourceLoader;
*/
@Autowired
ResourceLoader resourceLoader;
@Override
public void run(ApplicationArguments args) throws Exception {
var ctx = new ClassPathXmlApplicationContext("abc.xml");
System.out.println(resourceLoader.getClass());
Resource resource = resourceLoader.getResource("test.txt");
//Resource resource = resourceLoader.getResource("classpath:test.txt");
System.out.println(resource.getClass());
System.out.println(resource.exists()); System.out.println(Files.readString(Path.of(resource.getURI())));
}
}
var ctx = new ClassPathXmlApplicationContext("xxx.xml"); (クラスパスベース)またはvar ctx=new F i l e SystemXmlApplicationContext(「xxx.xml」)(ファイルシステムパスベース)内部に自動的にResourceResourceResource=ResourceLoaderが書き込まれます.getResource("xxx.xml"); に変換します.インタフェースの参照
- getInputStream()
- exitst()
- isOpen()
-getDescription():フルパスを含むファイル名または実際のURL
- ClassPathXmlApplicationContext -> ClassPathResource
- FileSystemXmlApplicationContext -> FileSystemResource
- WebApplicationContext -> ServletContextResource
- classpath:me/whiteship/config.xml -> ClassPathResource
- file:///some/resource/path/config.xml -> FileSystemResource
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext resourceLoader;
/*
@Autowired
ResourceLoader resourceLoader;
*/
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(resourceLoader.getClass());
Resource resource = resourceLoader.getResource("classpath:test.txt");
System.out.println(resource.getClass());
System.out.println(resource.exists());
System.out.println(resource.getDescription());
System.out.println();
System.out.println(Files.readString(Path.of(resource.getURI())));
}
}
ただし、Spring Webアプリケーションを作成する際には、classpath規格として多くのリソースが使用されているため、classpath接頭辞の使用を推奨します.接頭辞がない場合は、サーブレットContextResourceとして解析されます.Resource抽象に関する他のコンテンツは、https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-as-dependenciesにあります.
リファレンス
Reference
この問題について(リソースの抽象化), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/Resource-추상화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol