Spring中定义很多Resource类型(对资源文件的封装)
- ClassPathResource (类路径下)
- FileSystemResource (文件系统)
- UrlResource (网络url)
- ByteArrayResource (byte数组)
- ServletContextResource (访问ServletContext环境下的资源)
- InputStreamResource (输入流)
ResourceLoader
主要作用就是加载获取resource文件,这个接口方法主要就是getResource(String location)方法,然后这个接口有很多实现类(不同策略的实现)
eg:
@Test
public void testResourceLoader() {
ResourceLoader loader = new DefaultResourceLoader();
Resource resource = loader.getResource("http://www.google.com.hk");
System.out.println(resource instanceof UrlResource); //true
}
在bean中获取Resource文件的方式
1、直接通过new各种类型的Resource来获取对应的Resource
2、bean里面获取到对应的ApplicationContext,再通过ApplicationContext的getResource(String path)方法获取对应的Resource
3、直接创建DefaultResourceLoader的实例,再调用其getResource(String location)方法获取对应的Resource
4、通过依赖注入的方式把Resource注入到bean中
依赖注入Resource代码示例:
public class ClassA {
//持有一个Resource属性
private Resource resource;
public void printContent() {
if (resource != null && resource.exists()) {
if (resource.isReadable()) {
InputStream is;
try {
is = resource.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line=br.readLine()) != null) {
System.out.println(line);
}
if (is != null) {
is.close();
}
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void setResource(Resource resource) {
this.resource = resource;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="classA" class="com.xxx.ClassA">
<property name="resource">
<value>classpath:applicationContext.xml</value>
</property>
</bean>
</beans>
测试代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test1 {
@Autowired
private ClassA classA;
@Test
public void test() {
classA.printContent();
}
}
本博客内容参考于此博客