Spring 注入Resource

在之前的操作之中可以发现,虽然Resource的子类可以利用了字符串格式进行了隐藏,但是此时的代码之中发现ResourceLoader跟我的开发没有任何的关系.如果真的开发只关系Resource一个接口就够了。

1.为了解决Resource与ResourceLoader的操作关系耦合问题,那么在Spring设计的时候考虑到数据的自动转型问题,也就是说利用注入的操作模式,就可以让ResourceLoader消失了。

范例:编写一个资源处理类

public class ResourceBean {

	private Resource resource;

	public Resource getResource() {
		return resource;
	}

	public void setResource(Resource resource) {
		this.resource = resource;
	}
	
}

要想实现数据资源的注入操作,那么就必须编写applicationCpntext.xml文件,在这个文件里面定义所需要的资源.

范例:在applocationContext.xml文件里面定义


    

范例:编写测试类

public class TestResource {

	public static void main(String[] args)throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	    ResourceBean rebBean = ctx.getBean("rb",ResourceBean.class);
	    Scanner scanner = new Scanner(rebBean.getResource().getInputStream());
	    scanner.useDelimiter("\n");
	    while (scanner.hasNext()) {
	        System.out.println(scanner.next());
	        
	    }
	}
}

输出结果 :     halo

也可以修改bean配置中的value内容为CALSSPATH或者网络访问目标资源文件,对资源文件进行读取。

利用了配置文件的方式进行处理的时候,用户关系的只是Resource一个接口的使用,而ResourceLoader接口的作用被Spring封装起来了

       

2.而且最为方便的是,在Spring里面允许用户设置资源数组

范例:修改程序类

public class ResourceList {

	private List resource;

	public List getResource() {
		return resource;
	}

	public void setResource(List resource) {
		this.resource = resource;
	}
	
}

修改配置文件:


    
    
        file:E:\\test.xml
        classpath:META-INF/license.txt
        http://http://localhost:8080/ROOT/jianzhu.txt
    
    

范例:测试类

public class TestResourceList {

	public static void main(String[] args)throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		ResourceList rebBean = ctx.getBean("rblist",ResourceList.class);
        Iterator it = rebBean.getResource().iterator();
	    while(it.hasNext()){
		    Scanner scanner = new Scanner(it.next().getInputStream());
		    scanner.useDelimiter("\n");
		    while (scanner.hasNext()) {
		        System.out.println(scanner.next());
		    }
	    }
	}
}

输出结果:

halo

 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

.............................

halo1

 

利用Spring读取外部文件的时候它的设计要比使用IO包更加容易。

你可能感兴趣的:(#,spring全家桶,大学与Java那些年)