Spring學習八----------Bean的配置之Resources


 

© 版權聲明:本文為博主原創文章,轉載請注明出處

Resources

針對於資源文件的統一接口

-UrlResource:URL對應的資源,根據一個URL地址即可創建

-ClassPathResource:獲取類路徑下的資源文件

-FileSystemResource:獲取文件系統里面的資源

-ServletContextResource:ServletContext封裝的資源,用於訪問ServletContext環境下的資源(需導入spring-web.jar,需在web環境中測試,本次不測試。)

-InputStreamResource:針對於輸入流封裝的資源

-ByteArrayResource:針對於字節數組封裝的資源

ResourceLoader

spring的IOC容器中,所有的Application context都實現了ResourceLoader這個接口,所有的application context都可以用getResource()方法來獲取Resource實例。

前綴:

classpath:從類路徑中加載

file:從文件系統中作為url加載

http:作為url加載

(none):依賴於application context,也就是說application context是怎么加載的,它就是怎么加載的

實例

1.項目結構

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	
	<modelVersion>4.0.0</modelVersion>
	
	<groupId>org.springresources</groupId>
	<artifactId>Spring-Resources</artifactId>
	<packaging>jar</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Spring-Resources Maven Webapp</name>
	<url>http://maven.apache.org</url>
	
	<!-- 統一開發所需版本 -->
	<properties>
		<spring.version>4.3.7.RELEASE</spring.version>
	</properties>
	
	<dependencies>
		<!-- junit依賴 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- Spring核心依賴 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-core</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-beans</artifactId>
		    <version>${spring.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context</artifactId>
		    <version>${spring.version}</version>
		</dependency>
	</dependencies>
	
	<build>
		<finalName>Spring-Resources</finalName>
	</build>
</project>

3.test-resources.txt

測試spring Resource

4.SpringResource.java

package org.spring.resources;

import java.io.IOException;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.Resource;

public class SpringResource implements ApplicationContextAware {

	private ApplicationContext context;
	
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		
		this.context = applicationContext;
		
	}

	/**
	 * 通過classpath前綴獲取Resource
	 * 
	 * @throws IOException
	 */
	public void getClassPathResouce() throws IOException {
		
		Resource resource = context.getResource("classpath:test-resources.txt");
		System.out.println("ResourceLoader(classpath) filename: " + resource.getFilename());
		System.out.println("ResourceLoader(classpath) size: " + resource.contentLength());
		
	}
	
	/**
	 * 通過file前綴獲取Resource
	 * 
	 * @throws IOException
	 */
	public void getFileResouce() throws IOException {
		
		Resource resource = context.getResource("file:E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
		System.out.println("ResourceLoader(file) filename: " + resource.getFilename());
		System.out.println("ResourceLoader(file) size: " + resource.contentLength());
		
	}
	
	/**
	 * 通過url前綴獲取Resource
	 * 
	 * @throws IOException
	 */
	public void getUrlResouce() throws IOException {
		
		Resource resource = context.getResource("url:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/");
		System.out.println("ResourceLoader(url) filename: " + resource.getFilename());
		System.out.println("ResourceLoader(url) size: " + resource.contentLength());
		
	}
	
	/**
	 * 無前綴獲取Resource
	 * 
	 * 跟application context有關,本代碼中的application context是根據classpath獲取的,所以該方法中也是根據classpath前綴獲取的Resource
	 * 
	 * @throws IOException
	 */
	public void getResouce() throws IOException {
		
		Resource resource = context.getResource("test-resources.txt");
		System.out.println("ResourceLoader(none) filename: " + resource.getFilename());
		System.out.println("ResourceLoader(none) size: " + resource.contentLength());
		
	}
	
}

5.spring-resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
    <bean id="springResource" class="org.spring.resources.SpringResource"/>
    
</beans>

6.JunitTestBase.java

package org.spring.resources.test;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;

/**
 * Junit基類
 *
 */
public class JunitTestBase {

	private ClassPathXmlApplicationContext context;
	private String springXmlPath;
	
	/**
	 * 無參構造器,使用此構造器則使用默認spring配置文件
	 */
	public JunitTestBase() {
		
	}

	/**
	 * 含參構造器,初始化spring配置文件路徑
	 * 
	 * @param springXmlPath
	 * 						spring配置文件路徑
	 */
	public JunitTestBase(String springXmlPath) {
		super();
		this.springXmlPath = springXmlPath;
	}
	
	/**
	 * 加載spring配置文件到容器中,並啟動容器
	 * 在@Test方法執行之前執行
	 */
	@Before
	public void before() {
		
		if(StringUtils.isEmpty(springXmlPath)) {//默認spring配置文件
			springXmlPath = "classpath:spring-*.xml";
		}
		//加載spring配置文件到spring容器中
		context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
		//啟動spring容器,並將啟動信號擴散器該容器下的所有組件中
		context.start();
		
	}
	
	/**
	 * 銷毀Spring容器
	 * 在@Test方法執行之后執行
	 */
	@After
	public void after() {
	
		if(context != null){
			context.destroy();
		}
		
	}
	
	/**
	 * 通過bean Id獲取對象
	 * 
	 * @param beanId
	 * 					bean id
	 * @return
	 */
	public Object getBean(String beanId) {
		
		return context.getBean(beanId);
		
	}
	
}

7.TestSpringResources.java

package org.spring.resources.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.spring.resources.SpringResource;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.UrlResource;

@RunWith(BlockJUnit4ClassRunner.class)//默認執行類,可不寫
public class TestSpringResources extends JunitTestBase {

	//構造器初始化spring配置文件
	public TestSpringResources() {
		
		super("classpath:spring-resources.xml");
		
	}
	
	/**
	 * 測試UrlResource
	 * 
	 * @throws IOException 
	 */
	@Test
	public void testUrlResources() throws IOException {
		
		UrlResource resource = new UrlResource("http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/");
		System.out.println("UrlResource filename:" + resource.getFilename());
		System.out.println("UrlResource size:" + resource.contentLength());
		
	}

	/**
	 * 測試ClassPathResource
	 * 
	 * @throws IOException
	 */
	@Test
	public void testClassPathResource() throws IOException {
		
		ClassPathResource resource = new ClassPathResource("test-resources.txt");
		System.out.println("ClassPathResource filename:" + resource.getFilename());
		System.out.println("ClassPathResource size:" + resource.contentLength());
		
	}
	
	/**
	 * 測試FileSystemResource
	 * 
	 * @throws IOException
	 */
	@Test
	public void testFileSystemResource() throws IOException {
		
		FileSystemResource resource = new FileSystemResource("E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
		System.out.println("FileSystemResource filename:" + resource.getFilename());
		System.out.println("FileSystemResource size:" + resource.contentLength());
		
	}
	
	/**
	 * 測試InputStreamResource
	 * 
	 * @throws IOException
	 */
	@Test
	public void testInputStreamResource() throws IOException {
		
		InputStream is = new FileInputStream("E:\\code\\Spring-Resources\\src\\main\\resources\\test-resources.txt");
		InputStreamResource resource = new InputStreamResource(is);
		System.out.println("InputStreamResource filename:" + resource.getFilename());
		System.out.println("InputStreamResource size:" + resource.contentLength());
		
	}
	
	/**
	 * 測試ByteArrayResource
	 * 
	 * @throws IOException
	 */
	@Test
	public void testByteArrayResource() throws IOException {
		
		ByteArrayResource resource = new ByteArrayResource("Test Resource".getBytes());
		System.out.println("ByteArrayResource filename:" + resource.getFilename());
		System.out.println("ByteArrayResource size:" + resource.contentLength());
		
	}
	
	/**
	 * 測試ResourceLoader-classpath前綴
	 * 
	 * @throws IOException
	 */
	@Test
	public void testResourceLoaderClassPath() throws IOException {
		
		SpringResource springResource = (SpringResource) super.getBean("springResource");
		springResource.getClassPathResouce();
		
	}
	
	/**
	 * 測試ResourceLoader-file前綴
	 * 
	 * @throws IOException
	 */
	@Test
	public void testResourceLoaderFile() throws IOException {
		
		SpringResource springResource = (SpringResource) super.getBean("springResource");
		springResource.getFileResouce();
		
	}
	
	/**
	 * 測試ResourceLoader-url前綴
	 * 
	 * @throws IOException
	 */
	@Test
	public void testResourceLoaderUrl() throws IOException {
		
		SpringResource springResource = (SpringResource) super.getBean("springResource");
		springResource.getUrlResouce();
		
	}
	
	/**
	 * 測試ResourceLoader-無前綴
	 * 
	 * @throws IOException
	 */
	@Test
	public void testResourceLoader() throws IOException {
		
		SpringResource springResource = (SpringResource) super.getBean("springResource");
		springResource.getResouce();
		
	}

}

8.效果預覽

  8.1 執行testUrlResources方法

  8.2 執行testClassPathResource方法 

  8.3 執行testFileSystemResource方法

  8.4 執行testInputStreamResource方法

  8.5 執行testByteArrayResource方法

  8.6 執行testResourceLoaderClassPath方法

  8.7 執行testResourceLoaderFile方法

  8.8 執行testResourceLoaderUrl方法

  8.9 執行testResourceLoader方法

參考:http://www.imooc.com/video/3758

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM