我是EJB的新手。我想知道是可以在其他bean会话的方法中注入EJB,如果不是为什么?如下面的代码:
@Local
interface car {
public void drive();
}
@Stateless
public class Toyota implements Car {
@Override
public void drive() {
@EJB
Color color;
...
}
}
欢迎使用代码示例。
答案 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的信息,你会发现它是有原因的,因为容器管理局部变量是不可能的。