EJB3实例化

zdenda.online:

我提出了一些琐碎的问题。

如果我定义了EJB3 +接口,可以说它是远程的:

@Remote
public class FooServiceRemote {
   void foo();
}

和一个实现

@Stateless
public class FooService implements FooServiceRemote {
   void foo() { ... }
}

如果应用程序服务器仅知道@EJB注释以进行依赖项注入(例如在接口上),则默认情况下,应用程序服务器如何解析要使用的实现(并通过代理调用):

public class SomeClass {
   @EJB
   private FooServiceRemote fooService;
}

它是通过反射(缩短接口名称)完成的吗?或者,他扫描此类接口的可能实现,然后选择一个。要么.. ?如果我想创建一个接口的更多实现,该如何实现以及如何指定应实例化哪种实现(也许可以通过批注的某个参数)是可能的。

谢谢:-)

安东尼·阿乔里(Anthony Accioly):

在极少数情况下,您需要使两个bean实现相同的接口(不是一个好习惯),您可以命名它们并按名称选择想要的那个。

@Stateless(name="FooService1")
public class FooService1 implements FooService { }

@Stateless(name="FooService2")
public class FooService2 implements FooService { }

public class SomeClass {
   @EJB(beanName="FooService1") 
   private FooService fooService;
}

其他可能的方法是使用JNDI或该mappedName属性来查找它请参阅此处的EJB注释的Javadoc:http : //download.oracle.com/javaee/6/api/javax/ejb/EJB.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章