可以在其他 Bean 会话(远程或本地)的方法中注入 (@EJB) Bean class

Can Inject (@EJB) Bean in method of other Bean Session(Remote or Local) class

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

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

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

欢迎提供代码示例。

不,你不能注入方法。您只能在 class 级别、字段或 setter 中使用 @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

你不能。 @EJB @Target 定义如下:

@Target({TYPE, METHOD, FIELD})

@Inject @Target是这样定义的:

@Target({ METHOD, CONSTRUCTOR, FIELD })

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

Indicates the kinds of program element to which an annotation type is applicable.

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

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