提问人:Raedwald 提问时间:6/17/2014 最后编辑:Raedwald 更新时间:10/5/2018 访问量:3090
如何创建 Path Bean
How to create a Path bean
问:
我需要我的 Spring 应用程序上下文包含一个 bean,它是 (Java 7) Path
对象,具有固定的(已知)路径名。我应该使用什么 XML Bean 定义?
这种豆子有一些并发症:
Path
是一个接口,并且应使用Paths.get(String...)
静态工厂方法创建对象。Path
- 静态工厂方法还有一个重载变体
Paths.get(URI)。
由于对象是-a,bean的应该是:Path
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 抛出一个 ,抱怨“找不到匹配的工厂方法:工厂方法'java.nio.file.Paths.get()'。BeanCreationException
答:
-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
- 提供额外的空构造函数参数,以强制选择工厂方法的正确重载。这样就避免了不得不走迂回路线,而是构造文件 URI。
array
0赞
Stefanos Stefanou
10/5/2018
#4
好吧,我和你有同样的问题,我的解决方案是......
<bean id="ThreadRunnerConfigFile" class="java.nio.file.Paths" factory-method="get" c:_0="ThreadRunnerConfigFileStr" />
不要忘记在 .xml 配置文件中包含 c 命名空间
评论