有些情況下,要載入ApplicationContext以使用EJB組件, ContextJndiBeanFactoryLocator的默認實現基本上足夠了, 不過,當ApplicationContext需要載入多個bean,或這些bean初始化所需的時間或內存 很多的時候(例如Hibernate的SessionFactory的初始化),就有可能出問題,因為 每個EJB組件都有自己的副本。這種情況下,用戶會想重載 ContextJndiBeanFactoryLocator的默認實現,并使用其它 BeanFactoryLocator的變體,例如ContextSingleton 或者BeanFactoryLocator,他們可以載入并共享一個 BeanFactory或ApplicationContext來為多個EJB組件或其它客戶端所公用。這樣做 相當簡單,只需要給EJB添加類似于如下的代碼:
/**
* Override default BeanFactoryLocator implementation
*
* @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
*/
public void setSessionContext(SessionContext sessionContext) {
super.setSessionContext(sessionContext);
setBeanFactoryLocator(ContextSingletonBeanFactoryLocator.getInstance());
setBeanFactoryLocatorKey(ServicesConstants.PRIMARY_CONTEXT_ID);
}