如何创建Path bean

时间:2014-06-17 11:06:55

标签: java spring factory

我需要我的Spring应用程序上下文包含一个bean(Java 7)Path对象,它具有固定的(已知的)路径名。我应该使用什么XML bean定义?

这种豆有一些并发症:

由于对象是-a Path,bean的class应为Path

 <bean name="myPath" class="java.nio.file.Path"/>

我需要指出要使用的静态工厂方法,这似乎需要factory-method属性。但是工厂方法属于java.nio.file.Paths类而不是java.nio.file.Path类,所以我假设以下方法不起作用:

 <bean name="myPath" class="java.nio.file.Path"
    factory-method="java.nio.file.Paths.get"/>

最后,我需要给出工厂方法的参数。我怎么做?使用嵌套的constructor-arg(原文如此)元素?那么,这样的事情呢?

 <bean name="myPath" class="java.nio.file.Path"
    factory-method="java.nio.file.Paths.get">
    <constructor-arg value="/my/path/name"/>
 </bean>

但这不起作用:Springs抛出BeanCreationException,抱怨“找不到匹配的工厂方法:工厂方法'java.nio.file.Paths.get()'。”

4 个答案:

答案 0 :(得分:8)

经过一些pingw33n's answer的实验,我发现这很有效:

 <bean id="myPath" class="java.nio.file.Paths" factory-method="get">
    <constructor-arg value="/my/path" />
    <constructor-arg><array /></constructor-arg>
 </bean>

注意:

  • factory 类的名称(而不是 object 类)作为class属性的值。
  • 提供一个额外的空array构造函数参数,以强制选择工厂方法的正确重载。这避免了必须绕过instead constructing a file URI的路线。

答案 1 :(得分:0)

嗯,我和你有同样的问题,我的解决方法是...

<bean id="ThreadRunnerConfigFile" class="java.nio.file.Paths" factory-method="get" c:_0="ThreadRunnerConfigFileStr" />

不要忘记在.xml配置文件中包含c名称空间

答案 2 :(得分:-1)

下面的内容应该会有所帮助。

<bean id="myPath" class="java.nio.file.Paths" factory-method="get">
    <constructor-arg type="java.lang.String" value="/my/path/name" />
</bean>

答案 3 :(得分:-1)

试试这个:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod"><value>java.nio.file.Paths.get</value></property>
    <property name="arguments">
        <array>
            <value>/my/path/name</value>
            <array/>
        </array>
    </property>
</bean>