这里是上下文:
在图书馆,我们有这些套餐: - 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配置。
答案 0 :(得分:0)
两种方式:
在应用程序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”/>
显然这意味着您必须修改old.service.impl以添加“newService”的setter,然后在旧的服务impl代码中使用它
直接从Web应用程序上下文获取“new.service.impl”引用:
WebApplicationContextUtils.getWebApplicationContext(参数servletContext).getBean(newServiceImpl.class);
在这种情况下,您需要获取ServletContext。一种方法是从HttpRequest
获取它首选选项1 - 您不依赖于在servlet内部运行,并且代码中只需要很少的更改。