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

时间:2015-03-10 05:47:40

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

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

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

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

欢迎使用代码示例。

2 个答案:

答案 0 :(得分: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。{/ p>中的7.1 @EJB – injecting an EJB

答案 1 :(得分:1)

你做不到。 @EJB @Target的定义如下:

@Target({TYPE, METHOD, FIELD})

@Inject @Target的定义如下:

@Target({ METHOD, CONSTRUCTOR, FIELD })

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

  

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

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

如果你阅读了更多关于EJB的信息,你会发现它是有原因的,因为容器管理局部变量是不可能的。