是否有可能使用具有泛型绑定类的EJB?
问题描述:
当EJB与类似下面的泛型一样使用EJB时,是否为每个泛型创建了多个EJB?如果不是,它究竟是如何工作的?是否有可能使用具有泛型绑定类的EJB?
在此先感谢。
@Stateless(mappedName="blah")
public class Blah<T> {
public void doSomething(T obj) {
List<T> list = new ArrayList<T>();
list.add(obj);
return list;
}
}
public class BlahUser1 {
@EJB
private Blah<Integer> blah;
}
public class BlahUser2 {
@EJB
private Blah<String> blah;
}
答
不,对不起。
而这个问题甚至不是Java的type erasure,而是EJB。
@Stateless
注释通常会创建一个实例池(在技术上取决于应用程序服务器)并将其保存以备将来使用,这是出于性能原因。应用程序服务器将使用new
创建Blah
的一些实例并进行必要的注入。
但是它不能这样做,因为Blah<T>
没有完全指定。
但是,您可以使用CDI来实现与此类似的功能。你确定你需要EJB吗? (答案可能是肯定的,所以不要重构所有使用CDI的东西!)