gpt4 book ai didi

java - 我可以为 EJB 使用 CDI 构造函数注入(inject)吗?

转载 作者:太空狗 更新时间:2023-10-29 22:44:21 25 4
gpt4 key购买 nike

我想做这样的事情:

@Stateless
public class GreeterEjb {


private final Greeter greeter;


@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}


public String greet() {
return greeter.greet();
}
}

我在 Glassfish 3.1.1 和 JBoss 7.0.2 上试过,结果好坏参半。在某些情况下它起作用,在其他情况下它不起作用。参见 this thread in the Glassfisch forum如果您对细节感兴趣。

EJB 3.1 spec ,第 4.9.2 Bean 类部分说:

The class must have a public constructor that takes no parameters.

这听起来像是 EJB 不允许构造函数注入(inject)。

但是 CDI spec在第 3 节的开头说 CDI 支持 session Bean。然后第 3.2 节详细讨论了 CDI 和 EJB,但从未提及有关构造函数注入(inject)不起作用的任何内容。这让我认为它应该被允许。

那么,规范是否允许为 EJB 注入(inject) CDI 构造函数?

最佳答案

KrisPete Muir终于说服了我:EJB 必须有一个公共(public)的无参数构造函数,即使另一个构造函数用于注入(inject)。同时使用两个构造函数很奇怪,但它确实有效。谢谢大家。

在 Glassfish 3.1.1、JBoss 7.0.2 和 TomEE 1.0.0-beta-2 上成功测试。

@Stateless
public class GreeterEjb {

private final Greeter greeter;


@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}


// public no-arg constructor required for EJBs
// injection still works fine with the @Inject constructor
public GreeterEjb() {
this.greeter = null;
}


public String greet() {
return greeter.greet();
}
}

关于java - 我可以为 EJB 使用 CDI 构造函数注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com