@IocBean(args = { "refer:dao" })
我在文档上看到args是给构造函数传参,这个可以作用到父类的构造函数上吗。就是给父类的构函数传这个。
对 可以给父类传参数
假如你的service类继承IdEntityService或IdNameEntityService或NameEntityService,并且你用的service是别的数据源dao,而不是默认的dao,则可通过此方法,配置。
例如:
@IocBean(args = {"refer:testerDao"})
public class TesterService extends IdEntityService<Tester> {
}
testerDao在dao.js里配置了,跟默认的dao数据源不一样。
不过好像有问题,发现报以下错:
Caused by: org.nutz.lang.born.BorningException: Fail to born 'com.denghuafeng.service.TesterService'
by args: [
@(org.nutz.dao.impl.NutDao@3f191845)]
at org.nutz.lang.Mirror.getBorning(Mirror.java:954)
at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:107)
... 9 more
解决:
@IocBean(args = {"refer:testerDao"})
public class TesterService extends IdEntityService<Tester> {
public TesterService(Dao dao) {
super(dao);
}
}
看来是传当前类的构造方法,不支持父类。
父类IdEntityService,有此构造方法了,感觉当前类再重写个,感觉多余,@wendal 能否不加以上构造函数,能否实现以上功能?!
@wendal 不能,能先实例化这个service,然后调用setDao方法。
另一种dao引用法,@IocBean(fields = "dao")这种支持配置别的数据源吗?!不能这样改成这样写@IocBean(fields= {"dao:testerDao"})?
就好像在dao.js你配置一样:
bean:{
fields:{
dao:"testerDao"
}
}
虽然可以在@IocBean写,但覆盖setDao方法时更好的选择
@Inject("refer:testerDao")
public void setDao(Dao dao) {
super.setDao(dao);
}
另外, js里面写的是(带refer的)
bean:{
fields:{
dao: {refer:"testerDao"}
}
}
@wendal 恩恩,O(∩_∩)O谢谢解答! 多了种选择方式。