NutzCN Logo
问答 @IocBean(args = { "refer:dao" })注解的含义
发布于 3011天前 作者 qq_ea884751 3327 次浏览 复制 上一个帖子 下一个帖子
标签: ioc

@IocBean(args = { "refer:dao" })
我在文档上看到args是给构造函数传参,这个可以作用到父类的构造函数上吗。就是给父类的构函数传这个。

8 回复

构造函数中的属性

对 可以给父类传参数
假如你的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 能否不加以上构造函数,能否实现以上功能?!

@denghuafeng
构建一个类实例的时候还能直接调用父类构造方法的?写段合法能跑java代码看看?

@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谢谢解答! 多了种选择方式。

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