我正在尝试Guice。我做了一个简单的示例,它与Guice Getting Started手册中的示例非常相似。
但是一段时间没有起作用,并说:
找不到合适的构造函数
在mypack.ServiceUser中。上课必须
有一个(只有一个)
用@Inject注释的构造函数或
零参数构造函数
不是私人的在
mypack.ServiceUser.class(ServiceUser.java:14)
在定位mypack.ServiceUser时
问题出在进口方面。我将Google Guice和TestNG都附加到了该项目。我从org.testng.guice
包中导入了类。但是注释Inject
是从javax.inject
包中导入的。将导入更改为org.testng.guice.Inject
后,我的程序开始工作。
但是在那之后,我又玩了进口游戏。我将所有org.testng
导入都更改为com.google.inject
。该程序仍然有效。之后,我返回到@Inject
批注并将其导入更改为javax.inject.Inject
(就像我的第一个损坏版本一样)。而且该程序甚至在此之后仍然有效。
我再次检查了一下:来自TestNG软件包的Guice无法与javax.inject.Inject
一起使用,而来自Google软件包(com.google.inject
)的Guice可以正常使用。
为什么这么奇怪?
ps。我同时使用了Guice和TestNG的最新版本(guice-3.0-rc1和testng-5.14.5)。
最佳答案
简短的答案是:@Guice仍在开发中,在我们发言时已在邮件列表中进行了设计,因此仍处于试验阶段。
另外,您使用的是未记录的软件包,这些软件包保留给TestNG内部使用(org.testng.guice)。
我今天才推送了一个新版本,您可以在http://testng.org/beta下载它
请注意,此新版本不再包含org.testng.guice,因此请确保每当需要Guice符号时,都从com.google.inject导入它们。
如果您还有其他问题/疑虑,请在testng-users邮件列表中发布。
谢谢。