【问题标题】:Can Inject (@EJB) Bean in method of other Bean Session(Remote or Local) class可以在其他 Bean 会话(远程或本地)类的方法中注入(@EJB)Bean
【发布时间】:2015-03-10 05:47:40
【问题描述】:

我是 EJB 的新手。我想知道是否可以在其他 bean 会话的方法中注入 EJB,如果不能,为什么?如下代码:

@Local
interface car {
    public void drive();
}

@Stateless
public class Toyota implements Car {
   @Override
   public void drive() {
       @EJB 
       Color color;
       ...
   }
}

欢迎提供代码示例。

【问题讨论】:

  • 也许你应该先阅读一些关于 Java EE/EJB 的基础知识,然后再询问一切......

标签: java ejb ejb-3.1 glassfish-4 java-ee-7


【解决方案1】:

不,你不能注入方法。您只能在类级别、字段或设置器中使用 @EJB,如下所示:

@Stateless
@EJB(name="myBeanRef", beanInterface=MyBean.class)   // this creates only reference - you will need to initialize it for example via initialConetxt.lookup()
public class EJBTests{
    @EJB (name=”ejb/bean1”)  // this injects bean named ejb/bean1
    MyBean1 bean1;

    MyBean2 bean2;

    ....
    @EJB (name="ejb/bean2")   // this injects bean using setter method
    public void setEcho(MyBean2 bean2) {
       this.bean2 = bean2;
    }
}

更多详情请查看EJB 3.1 specification 中的7.1 @EJB – injecting an EJB

【讨论】:

    【解决方案2】:

    你不能。 @EJB @Target 是这样定义的:

    @Target({TYPE, METHOD, FIELD})
    

    @Inject @Target 的定义如下:

    @Target({ METHOD, CONSTRUCTOR, FIELD })
    

    这意味着注解只能用于列出的元素类型。来自@Target注解的Javadoc:

    表示注释类型所属的程序元素的种类 适用。

    您应该将 LOCAL_VARIABLE 作为 ElementType,以便能够将其作为方法的局部变量注入。

    如果您阅读有关 EJB 的更多信息,您实际上会发现,这是有原因的,因为容器不可能管理局部变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2013-12-23
      • 2015-05-24
      • 2013-06-30
      • 2015-02-12
      相关资源
      最近更新 更多