例如在this问题中,我看到:
@ManagedBean
@SessionScoped
public class LoginBean {
@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;
@EJB注释会自动将这些实例注入此类吗?
谢谢。
答案 0 :(得分: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+,则lookup属性需要JNDI查找才能解析目标。 某些应用程序服务器支持mappedName,指定为特定于供应商。这通常通过执行查找来实现。 应用程序服务器在部署时支持绑定。这通常通过执行查找来实现。 如果没有提供其他绑定信息,并且bean接口(beanInterface或字段类型)仅由应用程序中的单个EJB实现,那么EJB规范要求它回退到那个。 如果没有提供其他绑定信息且#4无法工作,某些应用程序服务器将尝试根据引用名称在服务器命名空间中执行查找(例如,java:comp / env / myEJB可能导致查找myEJB服务器名称空间)。