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

时间:2013-02-11 15:58:06

标签: java spring

这里是上下文:

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

在图书馆,我们有这些套餐: - old.service - old.service.impl - new.service - new.service.impl

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

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

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

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

谢谢。

ps:java库中没有XML配置。

1 个答案:

答案 0 :(得分:0)

两种方式:

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

    < bean class =“old.service.impl”> < property name =“newService”ref =“newServiceBean”/> < /豆腐> < bean class =“new.service.impl”id =“newServiceBean”/>

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

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

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

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

      获取它

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