spring关于底层资源的抽象是如此方便

原创 2006年06月11日 23:17:00
在以前的项目中对于一些资源的配置基本上都是通过spring的IOC注入一个目录的地址字符串。而这样的问题是,对于开发中的团队来说还是很有问题的,因为每个可能都配置一个不同的本地目录,而发布到服务器之后又有不同的目录。这样造成每个人提交了配置文件之后其他人都可能需要修改配置文件才能正确启动服务。这确实很令人烦劳。
     最近看《Professional Java Development with the Spring Framework》时看到了spring对底层资源的抽象,才找到了完美解决方案。
     原来的代码:
    private String templatePath;
    
public void setTemplatePath(String templatePath) {
        
this.templatePath = templatePath;
    }
    
public void initListener() {
        TemplateEventListener templateListener 
= new TemplateEventListener(){
            
public void handleTemplateEvent(TemplateEventSupport evt) {
                
// 添加事件到队列中
                queue.offer(evt);
                
if(log.isDebugEnabled()){
                    log.debug(
"Add Template about:" + evt.getTemplateName());
                }
            }
            
        };
        
        
//注册模版监听事件
        templateManager.addEventListener(Constants.TEMPLATE_SAVE_EVENT, templateListener,false);
        
        
        
//设置freemarker的参数
        freemarkerCfg = new Configuration();
        
try {
            freemarkerCfg.setDirectoryForTemplateLoading(
new File(templatePath));
            freemarkerCfg.setObjectWrapper(
new DefaultObjectWrapper());
            freemarkerCfg.setDefaultEncoding(
"UTF-8");
        } 
catch (IOException ex) {
            
throw new SystemException("No Directory found,please check you config.");
        }
    }
配置文件

    
<bean id="buildHtmlService" class="cn.jdk.leaf.service.impl.BuildHtmlServiceImpl" init-method="initListener">
        
<property name="templatePath"><value>${templatePath}</value></property>
    
</bean>
templatePath.path=D:/template
使用spring对底层资源的抽象只要把templatePath改成Resource就可以了
    private Resource templatePath;
    
public void setTemplatePath(Resource templatePath) {
        
this.templatePath = templatePath;
    }
    
public void initListener() {
            TemplateEventListener templateListener 
= new TemplateEventListener(){
            
public void handleTemplateEvent(TemplateEventSupport evt) {
                
// 添加事件到队列中
                queue.offer(evt);
                
if(log.isDebugEnabled()){
                    log.debug(
"Add Template about:" + evt.getTemplateName());
                }
            }
            
        };    
        
//注册模版监听事件
        templateManager.addEventListener(Constants.TEMPLATE_SAVE_EVENT, templateListener,false);
        
        
        
//设置freemarker的参数
        freemarkerCfg = new Configuration();
        
try {
            freemarkerCfg.setDirectoryForTemplateLoading(templatePath.getFile());
            freemarkerCfg.setObjectWrapper(
new DefaultObjectWrapper());
            freemarkerCfg.setDefaultEncoding(
"UTF-8");
        } 
catch (IOException ex) {
            
throw new SystemException("No Directory found,please check you config.");
        }
    }
bean的配置不变,只要修改properties文件就可以了。
    <bean id="buildHtmlService" class="cn.jdk.leaf.service.impl.BuildHtmlServiceImpl" init-method="initListener">
        
<property name="templatePath"><value>${templatePath}</value></property>
    
</bean>
把properties文件修改成
templatePath.path=template
在webcontext目录下面建立一个template目录就可以了。在部署到服务器的时候需要部署到一个特定的目录只要修改这个配置文件为
templatePath.path=file:/D:/template
这样就可以了。

创造共用协议:署名,非商业,保持一致   除经特别注明外,本文章版权归莫多泡泡所有.
署名,非商业用途,保持一致.   somebody(莫多)   

《抽象是一种美》

抽象是一种美
  • truexf
  • truexf
  • 2013年10月29日 10:52
  • 834

经典抽象数据类型

《C与指针》读书笔记 1. 内存分配 所有的ADT都必须确定一件事情——如何获取内存来存储值。有三种可选的方案:静态数组、动态数组、动态链式结构。 2 堆栈 堆栈这种数据最鲜明的特点就...
  • xiaohusaier
  • xiaohusaier
  • 2017年05月24日 01:20
  • 202

前端算法与抽象化概念及其程序模型的建立关系

前端对于算法的重视程度还是不足的,但是随着前后端分离的越来越明显,大量的数据渲染过程开始由服务器端开始转向浏览器端。 那么平时我们普通前端所做的工作用到算法的地方大部分还是遍历,事件绑定。也有些低层...
  • wzdlovewen
  • wzdlovewen
  • 2016年10月13日 17:38
  • 940

spring整合mybatis(入门级简单教程3)--获取sqlSession对象

引子:sqlSession对象在mybatis中的作用是不用说的了。比如我们可以用它来commit()、rollback()以及执行我们的map代码。下面介绍获取sqlSession对象的两种方法:(...
  • liangyihuai
  • liangyihuai
  • 2015年09月15日 13:45
  • 787

(七)Spring详解——资源Resource接口

Spring提供了一个Resource接口来统一对底层资源的方便访问,并提供了一些接口方法来完成常见操作。 Resouce接口 继承自InputStreamSource getInputStre...
  • jstxzhangrui
  • jstxzhangrui
  • 2016年11月10日 20:43
  • 453

通过Spring Resource接口获取资源

通过Spring Resource接口获取资源 目录 1       Resource简介 2       通过ResourceLoader获取资源 3       在bean中获取Resource的...
  • u013309230
  • u013309230
  • 2016年06月01日 21:51
  • 4580

spring mvc 中对静态资源的访问配置

spring mvc 的java web中对静态资源的访问配置
  • whereismatrix
  • whereismatrix
  • 2017年01月08日 22:47
  • 1335

道格拉斯 抽稀算法

道格拉斯抽稀算法
  • morgerton
  • morgerton
  • 2017年03月07日 18:24
  • 2100

Spring静态资源处理

针对静态文件处理的方法总结 动静分离一直是比较好的提高网站响应速度的方案。从网上搜索的资料来看有三种有关Spring与容器的方式。另外还有一些细节注意,否则会使controller失效。 第一种 ...
  • qq_16465949
  • qq_16465949
  • 2016年07月14日 11:11
  • 1103

Resource 接口是 Spring 资源访问的接口,具体的资源访问由该接口的实现类完成

Spring 框架提供了很好的扩展性,除了可以与各种第三方框架良好整合外,其 IoC 容器也允许开发者进行扩展,这种扩展甚至无须实现 BeanFactory 或 ApplicationContext ...
  • HEMM000
  • HEMM000
  • 2017年06月10日 20:25
  • 500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring关于底层资源的抽象是如此方便
举报原因:
原因补充:

(最多只允许输入30个字)