[英]Spring : How to inject manually a bean which is not managed by actual application?
這里的上下文:
在庫中,我們有以下軟件包:-old.service-old.service.impl-new.service-new.service.impl
舊服務是一些帶有二傳手的經典類。 它是在應用程序“ A”的XML配置中聲明的spring bean。
在新服務中,我們有一個帶有一些@Autowired屬性的帶注釋的類(@Service),以便由在XML配置中具有自動掃描功能的應用程序“ B”和“ C”進行管理。
我們希望更改舊服務的實現,以便使用新服務而不更改應用程序“ A”中的任何內容。 為此,我們可以從舊的類中調用新的類。 但是pb是Spring ......
我們如何實例化新類和@autowired屬性? 我們可以手動實例化舊類中的新類,並通過反射實例化屬性嗎?
謝謝。
ps:java庫中沒有XML配置。
兩種方式:
在應用程序A中,您實例化old.service.impl,Spring bean將對new.service.impl的引用注入其中
<bean class =“ old.service.impl”> <屬性名=“ newService” ref =“ newServiceBean” /> </ bean> <bean class =“ new.service.impl” id =“ newServiceBean” />
顯然,這意味着您將必須修改old.service.impl以為“ newService”添加設置器,然后在舊服務的impl代碼中使用它
直接從Web應用程序上下文獲取“ new.service.impl”引用:
WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean(newServiceImpl.class);
在這種情況下,您將需要獲取ServletContext。 一種方法是從HttpRequest中獲取它
選項1是首選-您不依賴於在servlet內部運行,並且幾乎不需要更改代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.