最近我我开发的一个系统里边有老的代码, 这些老代码没有使用Spring, 我们准备用Spring改写老代码, 但是写到一半, 发现问题很多,然后我们又不想丢掉我们写好的新代码, 所以我们就需要找到一个方法,使我们能够在老的代码里访问Spring的bean. 我们都知道要访问Spring bean 我们就必须得到一个ApplicationContext 或者 BeanFactory 对象, 而ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationContext对象去实例化bean, 换一句话说, 在服务器启动的时候,Spring容器就已经实例化好了一个ApplicationContext对象,所以我们要在老的代码里尝试去获取这个对象。 但是如何才能得到一个ApplicationContext对象呢?方法很多,最常用的办法就是用ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以我们在这里不采用这种加载文件的方式,我们使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。
ApplicationContextHelper
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- /**
- *
- * @author MinFei
- */
- public class ApplicationContextHelper implements ApplicationContextAware {
- private static ApplicationContext appCtx;
- /**
- * 此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。
- * @param applicationContext ApplicationContext 对象.
- * @throws BeansException
- */
- @Override
- public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException {
- appCtx = applicationContext;
- }
- /**
- * 这是一个便利的方法,帮助我们快速得到一个BEAN
- * @param beanName bean的名字
- * @return 返回一个bean对象
- */
- public static Object getBean( String beanName ) {
- return appCtx.getBean( beanName );
- }
- }
配置 ApplicationContextHelper
使用些列方法去得到一个bean
这样我们在老代码里取得了一个Spring配置的对象, 然后我们就可以自由自在的在老代码里边享受Spring提供的功能。
希望本博文对你有帮助。
相关推荐
当我们需要在非Spring管理的普通类中调用Spring管理的bean对象时,需要掌握特定的方法。这篇文档将详细介绍如何实现这一操作,并探讨相关的源码和技术工具。 首先,理解Spring的核心概念——依赖注入(Dependency ...
本文将探讨两种在Spring Boot中实现Controller间调用的方法及其优缺点。 首先,我们可以使用`RestTemplate`来模拟远程调用。这是一种常见的HTTP客户端工具,允许Controller A通过HTTP请求访问Controller B。以下是...
Java动态调用方法是Java反射机制的一个重要应用,它允许我们在程序运行时,根据需要动态地获取类的信息并调用其方法。这种能力为代码的灵活性和可扩展性提供了强大的支持,尤其在处理不确定的对象类型或者需要在运行...
在实际应用中,首先我们需要在服务器端创建一个服务接口和其实现类,然后使用Spring4的`@Service`注解标记这个实现类,让Spring管理它。接着,我们需要在服务器端暴露这个服务,这通常通过实现`HessianServlet`并将...
本文将深入探讨如何使用Axis2来动态地调用Web Service,并通过分析`WebServiceInvoker.java`这个文件来理解其实现原理。 1. **Java动态调用Web Service**: 在Java中,动态调用Web Service主要涉及到JAX-WS(Java ...
开发者可以通过定义Controller层的 endpoints,接收来自前端的HTTP请求,然后通过Service层调用OpenCV的Java绑定来处理图像。 Face++是人脸识别的第三方API,它提供了人脸识别、面部属性分析、活体检测等多种功能。...
在Java EE平台上,Spring框架提供了一种强大的方式来实现远程服务调用,特别是通过其HttpInvokerServiceExporter组件来实现基于HTTP的WebService功能。这个技术允许客户端和服务端通过HTTP协议进行通信,实现远程...
标题中的"Spring 远程调用"指的是Spring的远程服务访问(Remote Service Access,RSA)。RSA允许服务提供者创建远程服务,而服务消费者可以跨网络调用这些服务。在Web服务上下文中,Spring提供了WebServiceTemplate...
在压缩包文件`HiberTest`中,很可能包含了整个示例项目的源代码,包括Spring的配置文件、实体类、DAO、Service以及Controller等。通过分析这些代码,你可以更具体地了解如何在实际项目中整合Spring和Hibernate,从而...
例如,你可以创建一个`CameraService`接口和它的实现类`WebcamCameraService`,然后在Spring配置文件中声明这个服务,并通过@Autowired注解注入到需要使用摄像头的类中。这样,当需要调用摄像头时,只需依赖注入的`...
总的来说,Java调用Web Service服务是一个相对简单的过程,主要依赖于JAX-WS提供的工具和接口。通过理解这些基本概念和技术,你可以轻松地将各种Web Service集成到你的Java应用程序中,实现跨系统的数据共享和业务...
本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和“Server not identified”错误。 首先,我们需要了解ASMX。ASMX是.NET Framework早期版本中用于创建...
在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...
使用`@Service`注解的类会被Spring容器识别为一个Bean,但默认不会执行任何初始化或销毁操作。 若要添加初始化和销毁逻辑,我们可以使用`@PostConstruct`和`@PreDestroy`这两个JSR-250注解。`@PostConstruct`标注的...
在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建高质量的、松散耦合的、可测试的应用程序提供了强大的支持。Spring框架的一大特色就是其远程调用能力,这使得分布式系统的开发变得更加便捷。本实例将...
本示例主要关注通过HTTP协议和Web Service技术进行接口调用的Java实现,具体以Spring Boot框架为基础。下面我们将深入探讨这些知识点。 首先,HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于...
ServiceTask也可以通过activiti:delegateExpression属性来调用Spring Bean。在下面的示例代码中,我们将调用delegateExpressionBean: ```xml <serviceTask id="serviceTask1" activiti:delegateExpression="${...
Java调用插件代码是一个常见的需求,特别是在构建可扩展性和模块化的软件系统中。这个压缩包文件"java调用插件代码.rar"包含了相关的代码示例,可能用于演示如何在Java环境中加载和执行外部插件。下面将详细介绍Java...
Java调用WebService接口方法是Java开发中常见的任务,尤其在分布式系统和跨平台通信中扮演着重要角色。这里我们主要探讨使用Apache Axis库来实现这一功能。Apache Axis是一款开源工具,它提供了Java到SOAP(简单对象...
在提供的"demo"压缩包中,应该包含了一个Spring项目,其中包含了上述的配置和服务类实现。通过运行这些测试,你可以看到事务管理如何在A方法调用B方法时工作,以及在异常情况下如何回滚事务。这个示例代码对于理解和...