可以在其他 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 的内容,您实际上会发现,这是有原因的,因为容器不可能管理局部变量。
我是 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 的内容,您实际上会发现,这是有原因的,因为容器不可能管理局部变量。