[英]Turn off Autowiring for Spring @Service
我有一個自定義注釋,它被聲明為Spring托管服務:
@Service
public @interface MyServiceAnnotation {
// my service url
String url();
}
The above declaration enables my services to be autowired as Spring Managed beans.
@MyServiceAnnotation(url="/path/serviceLocation")
public class SomeService {
doWork();
}
但是,某些服務在applicationContext.xml
中具有其bean定義。 將@MyServiceAnnotation
添加到此類bean可以使它們既啟用自動裝配功能,又可以通過xml文件注入依賴項。
由於與遺留代碼相關的問題,我不想刪除xml bean定義並使它們全部自動裝配。
因此,在這種情況下,有沒有一種方法可以關閉自動裝配,並且仍然使用@MyServiceAnnotation
? 理想情況下,我希望在MyServiceAnnotation
上具有@Service
批注,現有服務仍將使用@MyServiceAnnotation
但將基於xml注入其依賴項。 如果沒有xml bean定義,所有新服務將自動裝配。
一種可能的方法是創建與MyServiceAnnotation
相同的NonSpringManagedMyServiceAnnotation
,但上面沒有@Service
注釋。 這樣做的缺點是我不得不復制MyServiceAnnotation
其余代碼,這些代碼我是不希望的。
這是一種方法,雖然可能不是最佳的。 我假設您已經在xml中指定了一個component-scan
標簽來掃描具有Spring構造型注釋的類,這些標簽支持exclude-filter
子標簽來忽略特定的模式。 如果您指定的文件遵循特定的模式(特定的程序包,特定的名稱等),則您可以簡單地指定此子標記來忽略包含注釋的類。
<context:component-scan base-package="mypackage">
<context:exclude-filter type="regex" expression=".*ToBeIgnoredNaming"/>
</context:component-scan>
我認為您應該嘗試保持關注分離。
在注解上添加@Service
使其成為事實上的Spring服務:由於這不是您想要的行為,因此您可以在每個服務(舊版和新版)上簡單地使用一個簡單的@MyAnnotation
(帶有url屬性)。 然后,在每個新服務上添加Spring的@Service
批注以通過批注啟用Bean注冊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.