2016-11-15 100 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的東西!)

相關問題