我正在研究使用CDI的开源项目mamute的代码库。在大多数类中,有一个已弃用的无参数构造函数和一个注释为@ Inject
的构造函数。This是上述项目中使用此方法的示例类。所以我的问题是,即使我们有一个带注释的构造函数@Inject
,我们还必须有一个无参数的构造函数吗?
答案 0 :(得分:7)
链接类具有以下导入和注释:
import br.com.caelum.vraptor.Controller;
...
import br.com.caelum.vraptor.routes.annotation.Routed;
...
@Routed
@Controller
public class QuestionController {
...
}
我找到了this javadoc for the Controller
annotation。
@Target(value=TYPE)
@Documented
@Retention(value=RUNTIME)
@Stereotype
@RequestScoped
public @interface Controller
请注意@RequestScoped
注释。
请求范围是正常范围(以及应用程序,会话和会话范围),JBoss Weld使用常规范围bean的客户端代理。为了能够创建代理,Weld需要以下内容:
容器无法代理以下Java类型:
- 没有没有参数的非私有构造函数的类,
- ...
来源:Weld - CDI Reference Implementation, 4.9. Client proxies
在其他情况下,您不需要no-arg默认构造函数(请参阅@Singleton
beans)。
更多链接: