【第四章】 资源 之 4.3 访问resource ——跟我学spring3 -凯发k8国际

`
jinnianshilongnian
  • 浏览: 21401405 次
  • 性别:
最近访客
博主相关
  • 微博
  • 相册
  • 收藏
  • 博客专栏
    跟我学spring3
    浏览量:2398690
    spring杂谈
    浏览量:2992538
    跟开涛学springmvc...
    浏览量:5627907
    servlet3.1规范翻...
    浏览量:256183
    springmvc杂谈
    浏览量:1591306
    hibernate杂谈
    浏览量:248335
    跟我学shiro
    浏览量:5842229

    浏览量:695959

    浏览量:778542
    文章分类
    社区版块
    • ( 10)
    • ( 1112)
    • ( 2428)
    存档分类
    最新评论
    • : 认真看错误代码,有时候重启电脑就行了 醉了 我把数据库配置写死 ...
    • : holyselina 写道您前面说到能获取调用是的参数数组,我 ...
    • : access denied for user 'root'@' ...
    • : 只有@aspectj支持命名切入点,而schema风格不支持命 ...
    • : 支持虽然会迟到,但永远不会缺席!

    【第四章】 资源 之 4.3 访问resource ——跟我学spring3

      博客分类:

     

    4.3.1  resourceloader接口

           resourceloader接口用于返回resource对象;其实现可以看作是一个生产resource的工厂类。

     

    java代码:
    public interface resourceloader {
           resource getresource(string location);
           classloader getclassloader();
    }

     

           getresource接口用于根据提供的location参数返回相应的resource对象;而getclassloader则返回加载这些resource的classloader。

     

           spring提供了一个适用于所有环境的defaultresourceloader实现,可以返回classpathresource、urlresource;还提供一个用于web环境的servletcontextresourceloader,它继承了defaultresourceloader的所有功能,又额外提供了获取servletcontextresource的支持。

     

           resourceloader在进行加载资源时需要使用前缀来指定需要加载:“classpath:path”表示返回classpathresource,“http://path”和“file:path”表示返回urlresource资源,如果不加前缀则需要根据当前上下文来决定,defaultresourceloader默认实现可以加载classpath资源,如代码所示(cn.javass.spring.chapter4.resourceloadertest):

     

    java代码:
    @test
    public void testresourceload() {
        resourceloader loader = new defaultresourceloader();
        resource resource = loader.getresource("classpath:cn/javass/spring/chapter4/test1.txt");
        //验证返回的是classpathresource
        assert.assertequals(classpathresource.class, resource.getclass());
        resource resource2 = loader.getresource("file:cn/javass/spring/chapter4/test1.txt");
        //验证返回的是classpathresource
        assert.assertequals(urlresource.class, resource2.getclass());
        resource resource3 = loader.getresource("cn/javass/spring/chapter4/test1.txt");
        //验证返默认可以加载classpathresource
        assert.asserttrue(resource3 instanceof classpathresource);
    }

     

           对于目前所有applicationcontext都实现了resourceloader,因此可以使用其来加载资源。

             classpathxmlapplicationcontext不指定前缀将返回默认的classpathresource资源,否则将根据前缀来加载资源;

             filesystemxmlapplicationcontext不指定前缀将返回filesystemresource,否则将根据前缀来加载资源;

             webapplicationcontext不指定前缀将返回servletcontextresource,否则将根据前缀来加载资源;

             其他:不指定前缀根据当前上下文返回resource实现,否则将根据前缀来加载资源。

     

    4.3.2  resourceloaderaware接口

           resourceloaderaware是一个标记接口,用于通过applicationcontext上下文注入resourceloader。

     

    java代码:
    public interface resourceloaderaware {
       void setresourceloader(resourceloader resourceloader);
    }

     

           让我们看下测试代码吧:

     

    1)  首先准备测试bean,我们的测试bean还简单只需实现resourceloaderaware接口,然后通过回调将resourceloader保存下来就可以了:

     

    java代码:
    package cn.javass.spring.chapter4.bean;
    import org.springframework.context.resourceloaderaware;
    import org.springframework.core.io.resourceloader;
    public class resourcebean implements resourceloaderaware {
        private resourceloader resourceloader;
        @override
        public void setresourceloader(resourceloader resourceloader) {
            this.resourceloader = resourceloader;
        }
        public resourceloader getresourceloader() {
            return resourceloader;
        }
    }
     

     

    2)  配置bean定义(chapter4/resourceloaderaware.xml):

     

    java代码:
    	
    
    

     

    3)测试(cn.javass.spring.chapter4.resoureloaderawaretest):

     

    java代码:
    @test
    public void test() {
        applicationcontext ctx = new classpathxmlapplicationcontext("chapter4/resourceloaderaware.xml");
        resourcebean resourcebean = ctx.getbean(resourcebean.class);
        resourceloader loader = resourcebean.getresourceloader();
        assert.asserttrue(loader instanceof applicationcontext);
    }

     

           注意此处“loader instanceof applicationcontext”,说明了applicationcontext就是个resoureloader。

           由于上述实现回调接口注入resourceloader的方式属于侵入式,所以不推荐上述方法,可以采用更好的自动注入方式,如“bytype”和“constructor”,此处就不演示了。   

     

    4.3.3  注入resource

           通过回调或注入方式注入“resourceloader”,然后再通过“resourceloader”再来加载需要的资源对于只需要加载某个固定的资源是不是很麻烦,有没有更好的方法类似于前边实例中注入“java.io.file”类似方式呢?

     

           spring提供了一个propertyeditor “resourceeditor”用于在注入的字符串和resource之间进行转换。因此可以使用注入方式注入resource。

     

           resourceeditor完全使用applicationcontext根据注入的路径字符串获取相应的resource,说白了还是自己做还是容器帮你做的问题。

     

    接下让我们看下示例:

           1)准备bean:

     

    java代码:
    package cn.javass.spring.chapter4.bean;
    import org.springframework.core.io.resource;
    public class resourcebean3 {
        private resource resource;
        public resource getresource() {
            return resource;
        }
        public void setresource(resource resource) {
            this.resource = resource;
        }
    }

     

     

           2)准备配置文件(chapter4/ resourceinject.xml):

     

    java代码:
    
       
    
    
    
    

     

           注意此处“resourcebean1”注入的路径没有前缀表示根据使用的applicationcontext实现进行选择resource实现。

     

           3)让我们来看下测试代码(cn.javass.spring.chapter4.resourceinjecttest)吧:

     

    java代码:
    @test
    public void test() {
        applicationcontext ctx = new classpathxmlapplicationcontext("chapter4/resourceinject.xml");
        resourcebean3 resourcebean1 = ctx.getbean("resourcebean1", resourcebean3.class);
        resourcebean3 resourcebean2 = ctx.getbean("resourcebean2", resourcebean3.class);
        assert.asserttrue(resourcebean1.getresource() instanceof classpathresource);
        assert.asserttrue(resourcebean2.getresource() instanceof classpathresource);
    }

     

     

           接下来一节让我们深入applicationcontext对各种resource的支持,及如何使用更便利的资源加载方式。

     

     

    原创内容 转自请注明出处【】

    分享到:
    |
    评论
    3 楼 2019-08-06  
    支持虽然会迟到,但永远不会缺席!
    2 楼 2017-11-28  
    支持虽然会迟到,但永远不会缺席!
    1 楼 2017-11-27  
    支持虽然会迟到,但永远不会缺席!

    相关推荐

      【第四章】 资源 之 4.3 访问resource ——跟我学spring3 【第四章】 资源 之 4.4 resource通配符路径 ——跟我学spring3 【第五章】spring表达式语言 之 5.1 概述 5.2 spel基础 ——跟我学spring3 【第五章】spring...

      1.13 【第四章】 资源 之 4.3 访问resource ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 1.14 【第四章】 资源 之 4.4 resource通配符路径 ——跟我学spring3 . . . . . . . ...

      spring概述2.1 ioc基础2.2 ioc 容器基本原理2.3 ioc的配置使用——跟我学spring33.1 di的配置使用3.2 循环依赖3.3 更多di的知识 3.4 bean的作用域 4.1 基础知识4.2 内置resource实现4.3 访问resource4.4 resource...

      跟我学spring3,包括spring 对象管理,aop,mvc,resource等,非常详细!

      null 博文链接:https://garrincha.iteye.com/blog/2109688

      spring-resource-handling, spring framework 4.1资源处理示例 spring-资源处理 这里应用程序演示 spring framework 4.1中的新资源处理功能。 它最初是为在 4.1中讨论资源而开发的,在 springone2gx 2014中讨论。...

      angular 进阶之 —— ngx-resource

      erp——enterprise resource planning 企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。erp系统集中信息技术与先进的管理思想於一身,成为现代...

      idea——websocket/springcloud/eureka/多provider集群,演示源程序资源!idea——websocket/springcloud/eureka/多provider集群,演示源程序资源!idea——websocket/springcloud/eureka/多provider集群,演示源...

      第4章 spring中的脚本 152 4.1 用脚本语言实现bean 152 4.1.1 问题 152 4.1.2 凯发k8国际娱乐官网入口的解决方案 153 4.1.3 工作原理 153 4.2 将spring bean注入脚本中 157 4.2.1 问题 157 4.2.2 凯发k8国际娱乐官网入口的解决方案 157 4.2.3 工作...

      null 博文链接:https://forestqqqq.iteye.com/blog/2235292

      利用spring resource读取配置文件。

      使用spring-cloud-security-oauth2来实现oauth server和resource server,oauth server和resource server分开,resource server实现了两种方式

      spring resource管理详解 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖

      第4章 spring中的脚本 152 4.1 用脚本语言实现bean 152 4.1.1 问题 152 4.1.2 凯发k8国际娱乐官网入口的解决方案 153 4.1.3 工作原理 153 4.2 将spring bean注入脚本中 157 4.2.1 问题 157 4.2.2 凯发k8国际娱乐官网入口的解决方案 157 4.2.3 工作...

      主要介绍了spring实战之servletcontextresource访问资源文件,结合实例形式分析了spring使用servletcontextresource读取与遍历资源文件相关操作技巧,需要的朋友可以参考下

      第4章 史上超豪华的手机控件 4.1 edittext与textview共舞——setonkeylistener事件 4.2 设计具有背景图的按钮——imagebutton的焦点及事件处理 4.3 给耶诞老人的信息——toast对象的使用 4.4 我同意条款——checkbox...

      4.3. 内置 resource 实现 4.3.1. urlresource 4.3.2. classpathresource 4.3.3. filesystemresource 4.3.4. servletcontextresource 4.3.5. inputstreamresource 4.3.6. bytearrayresource 4.4. ...

      第4章 史上超豪华的手机控件 4.1 edittext与textview共舞——setonkeylistener事件 4.2 设计具有背景图的按钮——imagebutton的焦点及事件处理 4.3 给耶诞老人的信息——toast对象的使用 4.4 我同意条款——checkbox...

      详细介绍了spring里各种对资源访问的支持。

    global site tag (gtag.js) - google analytics
    网站地图