我提出了一些琐碎的问题。
如果我定义了EJB3 +接口,可以说它是远程的:
@Remote
public class FooServiceRemote {
void foo();
}
和一个实现
@Stateless
public class FooService implements FooServiceRemote {
void foo() { ... }
}
如果应用程序服务器仅知道@EJB注释以进行依赖项注入(例如在接口上),则默认情况下,应用程序服务器如何解析要使用的实现(并通过代理调用):
public class SomeClass {
@EJB
private FooServiceRemote fooService;
}
它是通过反射(缩短接口名称)完成的吗?或者,他扫描此类接口的可能实现,然后选择一个。要么.. ?如果我想创建一个接口的更多实现,该如何实现以及如何指定应实例化哪种实现(也许可以通过批注的某个参数)是可能的。
谢谢:-)
在极少数情况下,您需要使两个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] 删除。
我来说两句