【问题标题】:How to load this file path from inside a spring application如何从弹簧应用程序内部加载此文件路径
【发布时间】:2012-01-29 01:13:56
【问题描述】:

我之前硬编码了一个加载 json 文件的路径,如下所示:

JsonParser parser = jf.createJsonParser(new File("/some/path/here/myapp/WEB-INF/settings.json"));

所以我尝试将其提取到一个属性文件中,例如 files.properties:

path.to.json=/some/path/here/myapp/WEB-INF/settings.json

现在如何修改对jf.createJsonParser 的调用以使用来自files.properties path.to/json 键的路径加载文件?

【问题讨论】:

    标签: java spring servlets


    【解决方案1】:

    我有点困惑。您的标题表明您正在寻找 Spring 解决方案,但据我所知,您在这里没有使用 IOC。否则,您将注入 JsonParser bean 而不会在您的代码中实例化它。

    在没有看到你正在做的全局结构的情况下,我会做以下事情(假设你已经正确配置了 Spring)。

    applicationContext.xml:

    <bean id="jsonParser" factory-bean="<jf bean definition>" factory-method="createJsonParer">
       <constructor-arg>classpath:/settings.json</constructor-arg>
    </bean>
    

    然后在使用 JsonParser 的实际类中,为简单起见自动装配:

    class myClass{
      @Autowired
      JsonParser jsonParser;
    
      public void myMethod(){
        String data = jsonParser.doSomthingNeatHere()....
      }
    
    }
    

    我假设 JsonParser 是范围原型,但如果更适合您的需求,您可以将其更改为单例。同样,我只给了你一些伪代码,让你了解如何让 Spring 管理 bean 的生命周期,而不是你自己实例化它。

    如果您需要更多参考资料,可以阅读有关 Spring 3 和 IOC here 的更多信息。

    【讨论】:

    • 我刚刚编辑了我的回复以更好地匹配您的原始声明。我不知道“jf.createJsonParser”中的“jf”是什么,所以我将它称为工厂bean。我的回答假设您之前已经定义了一个 bean “jf”。
    • 我正在使用 spring,但我并没有为我认为不重要的事情连接所有的 bean。这是个坏主意吗?
    • 总的来说,我不得不说是的。其他人可能会提出不同的意见,但是当你开始混搭时,你的代码并不一致,更重要的是,你不允许 Spring 管理 bean 的生命周期。如今,使用注释来自动定义您的 bean(例如:@Component、@Service 等)和注入(@Autowire),几乎没有理由不这样做。此外,通过忽略那些“不重要”的内容,您将一堆实现捆绑到代码中(而不是配置),这否定了 IOC 的巨大好处。
    【解决方案2】:

    如果您可以将文件放入源文件夹,请尝试"classpath:/"

    例子:

    new File( "classpath:/context/settings.json" );
    

    【讨论】:

      【解决方案3】:

      我不知道您是否在寻找特定于 Spring 的解决方案,但我认为使用 JCL 没有任何问题。

      Properties props = new Properties();
      props.load(new FileReader(propsFile));
      String jsonFile = props.getProperty("path.to.json");
      JsonParser parser = jf.createJsonParser(new File(jsonFile));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 2018-05-06
        相关资源
        最近更新 更多