我可以使用原始值(如String / int / long / etc)配置Spring bean。如何使以下工作:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean class="springtest.SomeBeanTest">
<constructor-arg index="0" type="java.nio.file.Path" value="/Users/admin/test.txt"/>
</bean>
</beans>
更新:以下工作。第二个varargs参数需要空列表。
<bean class="springtest.SomeBeanPath">
<constructor-arg index="0">
<bean class="java.nio.file.Paths" factory-method="get">
<constructor-arg index="0" value="/Users/admin/test.txt" />
<constructor-arg index="1"><list></list></constructor-arg>
</bean>
</constructor-arg>
</bean>
答案 0 :(得分:2)
bean定义XML语法几乎可以实现任何类。
您可以在此处查看Spring文档以获取完整参考: http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-class,我从中提取了以下样本。
例如,您可以通过以下方式使用空构造函数实例化任何类:
<bean id="exampleBean" class="examples.ExampleBean"/>
如果构造函数是静态方法,则可以这样调用
<bean id="clientService"
class="examples.ClientService" factory-method="createInstance"/>
如果需要使用参数调用构造函数,请查看: http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#beans-constructor-injection
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
</bean>
bar
和baz
应该是其他春豆的ID。相反,如果使用XML属性value
,则可以直接使用基本类型。
例如:
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg name="years" value="7500000"/>
<constructor-arg name="ultimateanswer" value="42"/>
</bean>
您也可以先选择调用空构造函数,然后选择调用bean上的调用setter(或混合使用这两种方法)。
<bean id="exampleBean" class="examples.ExampleBean">
<!-- setter injection using the nested <ref/> element -->
<property name="beanOne"><ref bean="anotherExampleBean"/></property>
<!-- setter injection using the neater ref attribute -->
<property name="beanTwo" ref="yetAnotherBean"/>
<property name="integerProperty" value="1"/>
</bean>
有非常高级的配置选项,允许您覆盖Spring解释XML以解释ref / value属性的方式。 地图,列表还有一个专用语法...... 一种名为Spring-EL的表达式语言,您可以在XML中的运行时使用它进行动态评估。 加上各种前/后处理器选项,适用于更高级的场景(BeanFactoryAware,BeanFactoryPostProcessor,...)
因此,在您的情况下,您可以尝试像这样分解:
<bean class="springtest.SomeBeanTest">
<constructor-arg index="0">
<bean class="java.nio.file.Paths" factory-method="get">
<constructor-arg index="0" value="your path" />
<!-- Edit: see @clay's edit to the question, the following is necessary too -->
<constructor-arg index="1"><list></list></constructor-arg>
</bean>
</constructor-arg>
</bean>
请注意,如果没有歧义,则不需要index属性。
答案 1 :(得分:0)
从配置文件中传递String
并将String
转换为SomeBeanTest
类中的Path
。
您可以使用Paths
类:
public class SomeBeanTest(){
public SomeBeanTest(String textPath){
Path path = Paths.get(textPath); // String to Path
}
}
XML:
<bean class="springtest.SomeBeanTest">
<constructor-arg value="/Users/admin/test.txt"/>
</bean>
注意:假设从类路径直接访问Users/admin/test.txt
。