我正在将我的Coldspring xml移植到Wirebox中,但是我被卡住了。
Coldspring中的<map>可以创建单例的结构,然后通过构造函数或设置器将该结构传递到“bean”中。<list>创建一个数组。
我应该用Wirebox.cfc写什么来做同样的事情呢?
<bean id="Foo" class="com.foo">
<constructor-arg name="something">
<map>
<entry key="apple">
<ref bean="apple"/>
</entry>
<entry key="banana">
<ref bean="banana"/>
</entry>
</map>
</constructor-arg>
</bean>
<bean id="bar" class="com.bar">
<constructor-arg name="anArray">
<list>
<bean class="com.XX"/>
<bean class="com.YY"/>
</list>
</constructor-arg>
</bean>发布于 2012-07-27 00:51:07
更新:在阅读了ColdSpring如何做到这一点后,我找到了一种简洁的方法来支持这一点。
首先,创建一个有两种方法的cfc:
component
{
struct function buildStruct() {
return arguments;
}
array function buildArray() {
var array = [];
for (var index = 1; index <= arrayLen(arguments); index++)
array[index] = arguments[index];
return array;
}
}然后在wirebox config.cfc中:
map("Factory")
.to("com.util.wirebox.Factory")
.asSingleton()
.noAutowire();
map("something")
.toFactoryMethod(factory="Factory", method="buildStruct")
.methodArg(name="apple", ref="apple")
.methodArg(name="banana", ref="banana");
map("Foo").to("com.Foo").initArg(name="something", ref="something").asSingleton();原始答案:
Luis Majano's Answer
// Map Binder so you can do utility methods
map("myBinder").toValue( this );
// Map the singleton maps
map("s1Map").toFactoryMethod("myBinder", "buildMap")
.methodArg(name="mapType", value="1");
// Map A service with a singleton map
map("Service").to("path")
.initArg(name="myMap", ref="s1Map");他建议我申请急诊室,就是这样:http://coldbox.assembla.com/spaces/coldbox/support/tickets/1387-support-for--list--and--map--of-coldspring-xml
发布于 2012-07-26 08:56:20
让我们分解一下,看看这里发生了什么。
1.)您正在创建一个id为foo的新bean,并将其映射到com.foo。要在wirebox中做到这一点,请使用map方法,并传入稍后要引用它的任何键。接下来,使用to方法将该键映射到路径
2.)您希望将一个map (结构)传递给组件init方法。要做到这一点,只需传入一个普通结构。这可以是任何值,包括使用initWith方法的其他bean。
<cfscript>
map("Foo")
.to("com.foo")
.initWith({apple=apple,banana=banana})
</cfscript>您还可以下载ColdFusion builder的Coldbox插件。这有一个很好的小工具,可以让你右击一个coldspring定义文件并将其转换为wirebox。希望这能有所帮助。
https://stackoverflow.com/questions/11660640
复制相似问题