该
@EJB注解(和
@Resource,
@WebServiceRef等),有两个目的:
- 它在组件名称空间中声明一个引用。例如,
@EJB(name="myEJB")
创建一个引用java:comp/env/myEJB
。如果您为字段添加注释而未指定名称,则它将创建一个引用java:comp/env/com.example.MyClass/myField
。 - 如果在字段或setter方法上声明了注释,则在创建组件时容器将执行注入。
引用的解析方式有所不同,与引用是针对
lookup("java:comp/env/myEJB")注入还是由于注入而解析无关:- 如果使用EE 6+,则该
lookup
属性需要JNDI查找来解析目标。 - 某些应用程序服务器支持
mappedName
,指定为特定于供应商的。这通常是通过执行查找来实现的。 - 应用程序服务器在部署时支持绑定。这通常是通过执行查找来实现的。
- 如果没有提供其他绑定信息,并且bean接口(
beanInterface
或字段类型)仅由应用程序中的单个EJB实现,则EJB规范要求它回落到那个。 - 如果没有提供其他绑定信息并且#4无法工作,则某些应用程序服务器将尝试基于引用名称在服务器名称空间中执行查找(例如,
java:comp/env/myEJB
可能导致myEJB
在服务器名称空间中进行查找)。



