gpt4 book ai didi

java - 在基于 EJB 的应用程序中加载 spring 上下文

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:11 25 4
gpt4 key购买 nike

情况如下:

我有一个业务层,那就是一个EJB项目。实际上,只创建了一个 EJB。该 EJB 负责将服务类暴露给调用该 EJB 的其他层。我想在这一层引入 spring(使用 DI 特性)。

我担心的是,在此业务层中加载 spring 上下文的最佳方式是什么,以便在调用 EJB 时不会一次又一次地加载 spring 上下文?

(在Web项目中,在contextLoaderListener中配置spring context是有优势的,只在应用启动时加载一次)

我曾考虑将 spring 包含在同一层中,因为:

  1. 配置所有 DAO 和服务类的依赖项,并在必要时注入(inject)它们。
  2. 在业务层使用 spring 对 hibernate 的支持。
  3. 通过将属性注入(inject)类并对其进行模拟,简化单元测试。不需要一次又一次地运行其他层来测试我的业务类/方法。
  4. 能够使用 AOP(面向方面​​的编程)进行日志记录和方法级审计。

请帮助我提出在 EJB 项目中加载 spring 上下文的最佳方法。我也想知道,如果我可以在应用程序服务器中加载相同的内容(我正在使用 Web 球应用程序服务器),是否有任何替代方案。

感谢和问候,

Jitendriya 短跑

最佳答案

Spring 应该按照您始终设置它的正常方式配置为您的应用程序的一部分。然后您需要从 EJB 层访问 Spring bean。要访问(改编自 from this post ),请按如下方式创建一个 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层可以随意访问。

关于java - 在基于 EJB 的应用程序中加载 spring 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com