代码之家  ›  专栏  ›  技术社区  ›  bmargulies

如何将spring中的属性设置为WEB-INF中的路径名?

  •  1
  • bmargulies  · 技术社区  · 14 年前

    我正在使用Spring的ContextLoaderListener来启动这一切,因此我无法运行Java代码从上下文获取路径并将其粘贴到${whatever}可以找到它的地方。

    考虑一些bean定义,比如:

    <bean class="my.class">
      <property name="somePath" value="/WEB-INF/a.txt"/>
    </bean>
    

    如果可能的话,我需要一种方法使该路径名通过ServletContextResource机制。对于类路径这样的类,似乎没有“前缀”:

    编辑

    我找到了bean类的源代码,它已经接受了相关属性的资源。所以这里发生了一些荒谬的事情,因为它抱怨好像找不到东西。帮我去调试器那里。

    再次编辑 :

    2 回复  |  直到 14 年前
        1
  •  3
  •   skaffman    14 年前

    Resource

    <property name="fileResource" value="/WEB-INF/path/to/file"/>
    

    这是更灵活的,您可以使用上的各种方法 资源 接口来获取诸如底层文件路径名之类的内容,例如 getFile().getAbsolutePath() .

    资源 FactoryBean 对于这个,比如:

    public class ResourcePathFactoryBean extends AbstractFactoryBean<String> {
    
        private Resource resource;
    
        @Required
        public void setResource(Resource resource) {
            this.resource = resource;
        }
    
        @Override
        protected String createInstance() throws Exception {
            return resource.getFile().getAbsolutePath();
        }
    
        @Override
        public Class<?> getObjectType() {
            return String.class;
        }
    }
    

    <bean id="myBean" class="com.MyBean">
       <property name="path">
          <bean class="com.ResourcePathFactoryBean">
             <property name="resource" value="/WEB-INF/path/to/file"/>
          </bean>
       </property>
    </bean>
    
        2
  •  1
  •   matt b    14 年前

    文件在类路径上吗?

    在你的bean中,你可以有一个属性,比如 Resource fileResource ,然后把它放进你的豆子里

    <property name="fileResource" value="classpath:/path/to/the/file"/>
    

    春天 Resource interface 有一个名为 getFile() ,它将返回资源的文件句柄。从那里你可以打电话 File.getAbsolutePath()