Java Spring:如何手动注入一个不由实际应用程序管理的bean?

Java Spring:如何手动注入一个不由实际应用程序管理的bean?,java,spring,Java,Spring,以下是上下文: 我们有一个java库,它是一个工厂代码 这个库直接部署在Tomcat上 应用程序“A”、“B”和“C”使用这个库(jar)进行编译,它是Tomcat上的部署版本,当应用程序调用它时使用它 在库中,我们有以下软件包: -旧服务 -old.service.impl -新服务 -new.service.impl 旧的服务是一些带有setter的经典类。它是在应用程序“a”的XML配置中声明的Springbean 在新的服务中,我们有一个带注释的类(@Service),该类具有一些@

以下是上下文:

  • 我们有一个java库,它是一个工厂代码
  • 这个库直接部署在Tomcat上
  • 应用程序“A”、“B”和“C”使用这个库(jar)进行编译,它是Tomcat上的部署版本,当应用程序调用它时使用它
在库中,我们有以下软件包: -旧服务 -old.service.impl -新服务 -new.service.impl

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

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

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

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

多谢各位

注:java库中没有XML配置。

两种方式:

  • 在应用程序A中,您在其中实例化old.service.impl Springbean,并将对new.service.impl的引用注入其中

  • 显然,这意味着您必须修改旧的.service.impl以添加“newService”的setter,然后在旧的service impl代码中使用它

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

    GetWebApplicationContextIls.getWebApplicationContext(servletContext).getBean(newServiceImpl.class)

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


    首选选项1—您不需要在servlet内部运行,只需要对代码进行很少的更改。

    不清楚您到底想要实现什么。您是否正在尝试将Springbean从“新服务”连接到应用程序中的bean setter中?如果是这样,一些SpringXML将起作用。如果您试图为同一接口注入不同的实现,那么限定符或一些XML都可以。请详细说明…我想将old.service.impl的代码更改为使用new.service.impl,而不更改应用程序“A”中的任何内容。但是我必须手动实例化一个类(在old.service.impl中是new.service.impl),它有许多
    @Autoried
    属性。那么,反射?能否在应用程序A的类路径扫描中添加new.service.impl?否。如果是这样,我将直接在应用程序A中更改我需要的内容。