【问题标题】:When using CDI in Java is the default constructor necessary?在 Java 中使用 CDI 时是否需要默认构造函数?
【发布时间】:2014-07-27 03:48:36
【问题描述】:

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

【问题讨论】:

    标签: jakarta-ee dependency-injection cdi


    【解决方案1】:

    链接的类具有以下导入和注释:

    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

    在其他情况下,您不需要无参数默认构造函数(请参阅@Singleton beans)。

    更多链接:

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2019-03-01
      相关资源
      最近更新 更多