在Java中使用CDI是必需的默认构造函数吗?

时间:2014-07-27 03:48:36

标签: java-ee dependency-injection cdi

我正在研究使用CDI的开源项目mamute的代码库。在大多数类中,有一个已弃用的无参数构造函数一个注释为@ Inject的构造函数。This是上述项目中使用此方法的示例类。所以我的问题是,即使我们有一个带注释的构造函数@Inject,我们还必须有一个无参数的构造函数吗?

1 个答案:

答案 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)。

更多链接: