Java 在基于EJB的应用程序中加载spring上下文
情况如下: 我有一个业务层,这是一个EJB项目。实际上,只创建了一个EJB。此EJB负责将服务类公开给调用EJB的其他层。我想在这一层中介绍spring(使用DI特性) 我关心的是,在这个业务层中加载spring上下文的最佳方式是什么,这样无论何时调用EJB,spring上下文都不会被一次又一次地加载 (在Web项目中,在contextLoaderListener中配置spring上下文有一个优势,并且只有在应用程序启动时才会加载一次) 我曾考虑将spring包含在同一层中,因为:Java 在基于EJB的应用程序中加载spring上下文,java,spring,jakarta-ee,ejb,spring-remoting,Java,Spring,Jakarta Ee,Ejb,Spring Remoting,情况如下: 我有一个业务层,这是一个EJB项目。实际上,只创建了一个EJB。此EJB负责将服务类公开给调用EJB的其他层。我想在这一层中介绍spring(使用DI特性) 我关心的是,在这个业务层中加载spring上下文的最佳方式是什么,这样无论何时调用EJB,spring上下文都不会被一次又一次地加载 (在Web项目中,在contextLoaderListener中配置spring上下文有一个优势,并且只有在应用程序启动时才会加载一次) 我曾考虑将spring包含在同一层中,因为: 配置所有DA
Jitendriya破折号将EJB标记为单例(
@Singleton
)。并在创建一次spring上下文后将其存储在这个bean中的变量中,这样您就可以一次又一次地返回相同的上下文。spring应该按照通常设置的方式配置为应用程序的一部分。然后您需要从EJB层访问Springbean。要访问(调整),请按如下方式创建Springbean:
@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建议使用。基本上,您可以使用指定Spring上下文,这需要在类路径中的beanContextRef.xml中创建Spring上下文。可能是你耳朵的一部分。SpringBeanAutowiringInterceptor将您的bean注入EJB。EJB3.1不是有自己的依赖注入框架吗,如果您只需要一个轻量级DI,CDI会更好地集成吗?