0

这里的上下文:

  • 我们有一个 java 库,它是一个工厂代码。
  • 这个库直接部署在Tomcat上
  • 应用程序“A”、“B”和“C”使用这个库(jar)编译,它是Tomcat上部署的版本,应用程序调用它时使用。

在库中,我们有这些包: - old.service - old.service.impl - new.service - new.service.impl

旧服务是一些带有 setter 的经典类。它是在应用程序“A”的 XML 配置中声明的 spring bean。

在新服务中,我们有一个带有一些 @Autowired 属性的注释类 (@Service),以便由在 XML 配置中具有自动扫描的应用程序“B”和“C”管理。

我们想更改旧服务的实现,以便在不更改应用程序“A”中的任何内容的情况下使用新服务。为此,我们可以从旧的类中调用新类。但是pb是春天……

我们如何实例化新类和@autowired 属性?我们可以手动实例化旧类中的新类,并通过反射实例化属性吗?

谢谢你。

ps:java库中没有xml配置。

4

1 回答 1

0

两种方式:

  1. 在您实例化 old.service.impl 的应用程序 A 中,Spring bean 将 new.service.impl 的引用注入其中

    <bean class="old.service.impl"> <property name="newService" ref="newServiceBean"/> </bean> <bean class="new.service.impl" id="newServiceBean" />

显然,这意味着您必须修改 old.service.impl 以添加“newService”的设置器,然后在旧服务 impl 代码中使用它

  1. 直接从 Web 应用程序上下文中获取“new.service.impl”引用:

    WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean(newServiceImpl.class);

在这种情况下,您将需要获取 ServletContext。一种方法是从 HttpRequest 获取它

选项 1 是首选 - 那时您不依赖于在 servlet 中运行,并且只需要对代码进行很少的更改。

于 2013-02-11T18:56:47.963 回答