NutzCN Logo
问答 可以实现ioc实例化对象的同时 调用其自身方法吗?
发布于 3012天前 作者 qq_041ad963 1768 次浏览 复制 上一个帖子 下一个帖子
标签:

本人nutz初心者 想在配置文件中设置 容器中生成TestClassTmpl对象的同时 调用其自身的方法getNameType 参数是"2" 这样可以实现吗 ?
如下配置完是失败的。。。想请教各位前辈~

js:
testClassTmpl: {
type: 'com.TestClassTmpl', // 类型
fields : {
name : '大名'
}
},
testClassMethod : {
oneField : {
java: '$testClassTmpl.getNameType("2")'
}
}

java:
JsonLoader jsonLoader = new JsonLoader(str);
Ioc ioc = new NutIoc(jsonLoader);
try {
TestClassTmpl obj = ioc.get(null, "testClassTmpl");
...

5 回复

何不变通一下呢? 把值设置到一个属性,然后声明create事件

var ioc = {
     abc : {
	    type : "xxx.yyy.zzz",
		fields: {
		      xyz : "2"
		},
		events : {
		     create : "init"
		}
	 }
};

这样,初始化abc的相关属性之后,就会调用其无参数的init方法.

十分感谢大侠,这样确实可以解决。不过根据属性不同,得生成多个对象,不太理想。。。
我的设想是单例,根据方法getNameType(参数设想是容器中的对象)传入不同的参数,执行不同逻辑处理,
以达到多次调用的目的,这样我在程序外围只修改js配置文件即可,程序不动(扩展性考虑)。
不知道这样能否实现?望大侠指点迷津~~~

譬如如下(设想而已,写法不对。。。)
testClassTmpl: {
type: 'com.TestClassTmpl', // 类型
fields : {
name : '大名'
}
},
testClassMethod_1 : {
oneField : {
java: '$testClassTmpl.getNameType("1")'
}
},
testClassMethod_2 : {
oneField : {
java: '$testClassTmpl.getNameType("2")'
}
}...

"不过根据属性不同,得生成多个对象" 这是要做工厂方法?

abc : {
   type : "xxx.yyy.zzz"
},
testout_a {
   type : "java.lang.Object", // 纯粹是个占位符
   factory : "$abc#getNameType",
   args : ["2"] // 会传给factory方法作为参数
}

效果是:

首先,生成一个abc, 然后调用 abc.getNameType("2") 生成 testout_a

对,就是工厂模式,十分感谢阁下,受教受教~~

小弟知识浅薄。。。只能以打赏以谢阁下~~~

添加回复
请先登陆
回到顶部