2016-03-18 95 views
0

我有一組類,如下所示。只註冊Spring應用程序上下文接口的實現?

public class ServiceA implements CommonInterface 
{ 
    public void startA() 
    { 
     .... 
    } 
} 

public class ServiceB implements CommonInterface 
{ 
    public void startB() 
    { 
     .... 
    } 
} 

是否有彈簧框架自動註冊只有其實現CommonInterface到應用程序上下文和訪問他們班什麼辦法?

+0

爲什麼不使用'@ Service'註釋的任意實現?爲什麼不使用具有實現類型的'@ Autowire'來訪問? –

+0

@KenBekov:'@ Service'將通過掃描base-packages來啓用註冊。但是我需要更多的過濾器,例如 - 實現CommonInterface的類類型。另一方面,@ Autowire'只會幫助自動注入引用對象,這不是我的場景。 –

回答

4

是的,這是可能的。如果您使用的是Java Configuration,則可以使用@ComponetScan將組件過濾爲實現特定接口的組件。您需要禁用Spring使用的默認過濾器(基於檢測標註類註釋的類,即@Component,@Service等)。

@Configuration 
@ComponentScan(basePackages = {"com.mydomain.myapp.service"} , useDefaultFilters = false , includeFilters = {@Filter(type = FilterType.ASSIGNABLE_TYPE , value = CommonInterface.class)}) 
public class AppConfig{ 
    //@Bean methods 
} 

同樣也可以在XML中使用上下文來實現:組件掃描

+0

是的。看起來不錯。我沒有@Configuration類來註冊服務。同樣的過濾器也適用於applicationcontext的掃描API。讓我檢查一下。 –

+0

+0

對不起,我會改變。我沒有beans.xml文件也沒有'@ configuration'類。我想要做的就是實例化一個'annotationConfigApplicationContext'對象,並使用它的'scan' api來提供過濾器。 'scan'的功能類似於'componentscan',但它是通過'applicationcontext'對象而不是'config'對象。 –

相關問題