【问题标题】:Inject an EJB through the setter method通过 setter 方法注入 EJB
【发布时间】:2014-06-04 10:25:20
【问题描述】:

我正在定义一个 Java EE bean,如下所示:

@LocalBean
@Stateless
public class GreetingBean {

    private HelloBean helloBean;

    @Inject
    public void setHelloBean(HelloBean helloBean) {
        this.helloBean = helloBean;
    }

    // ...
}

还有:

@Named
public class HelloBean {

    public HelloBean() { // ... }

    public HelloBean(String hello) { // ... }

}
  1. 现在,我如何注入 GreetingBean 到另一个类,同时为它设置一个HelloBean 实例?

  2. 假设我有两个不同的 HelloBean 类构造函数(一个有参数,例如 String,另一个没有 [default]),如何我可以正确注射吗?

【问题讨论】:

  • 为什么不把@Inject 放在helloBean 属性上?
  • 这不是我的问题。假设我有两个不同的 HelloBean 类构造函数(一个有参数,例如一个字符串,另一个没有),我怎样才能正确注入呢?

标签: java jakarta-ee ejb cdi


【解决方案1】:

如果您有两个不同的构造函数,这与您在这里提出的问题非常不同。在这种情况下,将在 HelloBean 实例化时调用默认构造函数(不带参数)。 要使用参数注入 bean 实例,您必须使用将实例化 HelloBean 的生产者方法。更多信息可以在herehere找到。

【讨论】:

  • 我怎样才能通过使用参数来注入一个 HelloBean 实例?
  • 好的,我读到了@producer 和枚举类型,但仍有一些不清楚的地方。使用枚举,我可以从一组具体实现中进行选择,但是如何将现有对象作为参数传递? - 例如,一个具体的类需要一个特定的字符串到它的构造函数中。
  • 如何 return new HelloBean("your string");在生产者方法中?
猜你喜欢
  • 2019-10-18
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多