[英]Load spring context in an EJB based application
情況如下:
我有一個業務層,即EJB項目。 實際上,僅創建了一個EJB。 該EJB負責將服務類公開給其他層,這些層稱為EJB。 我想在這一層中介紹spring(使用DI功能)。
我的擔心是,在此業務層中加載spring上下文的最佳方法是什么,這樣每當調用EJB時就不會一次又一次地加載spring上下文?
(在Web項目中,有一個優點是在contextLoaderListener中配置spring上下文,並且僅在應用程序啟動時才加載一次)
我曾考慮將spring包含在同一層中,因為:
請幫我建議最好的方法,在EJB項目中加載spring上下文。 我還想知道,是否有其他選擇可以將相同的內容加載到應用服務器中(我正在使用Web sphere應用服務器)。
謝謝並恭祝安康,
Jitendriya Dash
應該以始終設置的正常方式將Spring配置為應用程序的一部分。 然后,您需要從EJB層訪問Spring bean。 要訪問( 從本文改編),請創建一個Spring bean,如下所示:
@Component
public class SpringApplicationContext implements ApplicationContextAware {
private static ApplicationContext CONTEXT;
public void setApplicationContext(ApplicationContext context) throws BeansException {
CONTEXT = context;
}
public static Object getBean(String beanName) {
return CONTEXT.getBean(beanName);
}
}
然后,從舊版應用程序調用有問題的Bean:
SomeService someService = (SomeService)SpringApplicationContext.getBean("someServiceImpl");
Spring上下文被初始化一次,您的EJB層可以隨意訪問。
對於EJB3,Spring建議使用EJB3 Injection Interceptor 。 基本上,您可以使用ContextSingletonBeanFactoryLocator指定Spring上下文,這需要在類路徑的beanContextRef.xml中創建Spring上下文。 可能是您的EAR的一部分。 SpringBeanAutowiringInterceptor將您的bean注入到EJB中。
將EJB標記為Singleton( @Singleton
)。 將Spring上下文創建一次后,將其存儲在此bean中的變量中,以便您可以一次又一次返回相同的上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.