我需要我的Spring应用程序上下文包含一个bean(Java 7)Path
对象,它具有固定的(已知的)路径名。我应该使用什么XML bean定义?
这种豆有一些并发症:
Path
是一个接口,应使用Paths.get(String...)
静态工厂方法创建Path
个对象。Paths.get(URI)
。由于对象是-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()'。”
答案 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>
注意:
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>