【发布时间】:2014-07-27 03:48:36
【问题描述】:
我正在研究使用 CDI 的开源项目 mamute 的代码库。在大多数类中,有一个已弃用的无参数构造函数和注释的构造函数 @Inject.This 是上述项目中使用这种方法的示例类。所以我的问题是,即使我们有一个注释为@Inject 的构造函数,我们是否也必须有一个无参数的构造函数?
【问题讨论】:
标签: jakarta-ee dependency-injection cdi
我正在研究使用 CDI 的开源项目 mamute 的代码库。在大多数类中,有一个已弃用的无参数构造函数和注释的构造函数 @Inject.This 是上述项目中使用这种方法的示例类。所以我的问题是,即使我们有一个注释为@Inject 的构造函数,我们是否也必须有一个无参数的构造函数?
【问题讨论】:
标签: jakarta-ee dependency-injection cdi
链接的类具有以下导入和注释:
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)。
更多链接:
【讨论】: