2016-11-15 120 views
0

当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; 
} 

回答

1

不,对不起。

而这个问题甚至不是Java的type erasure,而是EJB。

@Stateless注释通常会创建一个实例池(在技术上取决于应用程序服务器)并将其保存以备将来使用,这是出于性能原因。应用程序服务器将使用new创建Blah的一些实例并进行必要的注入。

但是它不能这样做,因为Blah<T>没有完全指定。

但是,您可以使用CDI来实现与此类似的功能。你确定你需要EJB吗? (答案可能是肯定的,所以不要重构所有使用CDI的东西!)

相关问题