簡體   English   中英

在基於EJB的應用程序中加載spring上下文

[英]Load spring context in an EJB based application

情況如下:

我有一個業務層,即EJB項目。 實際上,僅創建了一個EJB。 該EJB負責將服務類公開給其他層,這些層稱為EJB。 我想在這一層中介紹spring(使用DI功能)。

我的擔心是,在此業務層中加載spring上下文的最佳方法是什么,這樣每當調用EJB時​​就不會一次又一次地加載spring上下文?

(在Web項目中,有一個優點是在contextLoaderListener中配置spring上下文,並且僅在應用程序啟動時才加載一次)

我曾考慮將spring包含在同一層中,因為:

  1. 配置所有DAO和服務類的依賴項,並在必要時注入它們。
  2. 在業務層中使用Spring支持進行休眠。
  3. 通過將屬性注入類並對其進行仿真,可以簡化單元測試。 不需要一次又一次地運行其他層來測試我的業務類/方法。
  4. 能夠使用AOP(面向方面​​的編程)進行日志記錄和方法級別審核。

請幫我建議最好的方法,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM