如何创建 Path Bean

How to create a Path bean

提问人:Raedwald 提问时间:6/17/2014 最后编辑:Raedwald 更新时间:10/5/2018 访问量:3090

问:

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

这种豆子有一些并发症:

由于对象是-a,bean的应该是:PathclassPath

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

我需要指示要使用的静态工厂方法,这似乎需要一个属性。但是工厂方法属于类而不是类,因此我假设以下方法不起作用:factory-methodjava.nio.file.Pathsjava.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 抛出一个 ,抱怨“找不到匹配的工厂方法:工厂方法'java.nio.file.Paths.get()'。BeanCreationException

Java 弹簧 工厂

评论


答:

-1赞 Sajan Chandran 6/17/2014 #1

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

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

评论

0赞 Raedwald 6/17/2014
不:。org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myPath' defined in class path resource [spring.xml]: No matching factory method found: factory bean 'pathFactory'; factory method 'get()'
-1赞 pingw33n 6/17/2014 #2

试试这个:

<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>

评论

0赞 Raedwald 6/17/2014
不:。org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myPath' defined in class path resource [spring.xml]: No matching factory method found: factory method 'java.nio.file.Paths.get()'
9赞 4 revs, 2 users 91%Raedwald #3

在对 pingw33n 的答案进行了一些实验后,我发现这很有效:

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

注意:

  • 工厂类的名称(而不是对象类)指定为属性的值。class
  • 提供额外的空构造函数参数,以强制选择工厂方法的正确重载。这样就避免了不得不走迂回路线,而是构造文件 URIarray
0赞 Stefanos Stefanou 10/5/2018 #4

好吧,我和你有同样的问题,我的解决方案是......

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

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