0

例如在这个问题中,我看到:

@ManagedBean
@SessionScoped
public class LoginBean {

@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;

@EJB 注解是否会自动将这些实例注入此类?

谢谢你。

4

1 回答 1

3

@EJB 注释(以及@Resource、@WebServiceRef 等)有两个用途:

它在组件命名空间中声明一个引用。例如,@EJB(name="myEJB") 创建一个引用 java:comp/env/myEJB。如果您对字段进行注释但未指定名称,则会创建一个引用 java:comp/env/com.example.MyClass/myField。如果在字段或 setter 方法上声明了注解,则容器在创建组件时执行注入。解析引用的方式各不相同,与解析引用是为了查找(“java:comp/env/myEJB”)还是由于注入无关:

如果使用 EE 6+,则查找属性需要 JNDI 查找来解析目标。一些应用程序服务器支持 mappedName,它被指定为特定于供应商的。这通常通过执行查找来实现。应用程序服务器在部署时支持绑定。这通常通过执行查找来实现。如果没有提供其他绑定信息并且 bean 接口(beanInterface 或字段类型)仅由应用程序中的单个 EJB 实现,那么 EJB 规范要求它回退到那个。如果没有提供其他绑定信息并且#4 无法工作,一些应用程序服务器将尝试根据 ref 名称在服务器命名空间中执行查找(例如,java:comp/env/myEJB 可能会导致在服务器命名空间)。

于 2013-05-06T13:37:46.210 回答