2016-08-09 83 views
0

我有一個@Component -annotated類,它有幾個自動連線的依賴關係。我不想自動掃描該軟件包,因爲它有很多其他我不想初始化的類。Spring定義bean來自動掃描

我可以將這些添加到@Configuration作爲@Bean,但我不想失去讓東西自動連線的能力,而且實際上並沒有在配置的所有位置更改配置。換句話說,我不希望手動列出上述組件的所有依賴關係。

我知道我可以使用過濾器進行組件掃描,但是當以上述方式選擇不同包中的許多類時,這些過程非常麻煩。

有沒有辦法告訴Spring添加和自動連線一個特定的類?

回答

1

JavaDoc可以看出,@ComponentScan註釋有幾種不同的註冊組件的方法。如果您不想使用過濾器,最簡單的做法可能是選擇性地添加要掃描的類和子包,而不是應用程序的頂層。例如:

@Configuration 
@ComponentScan(
    basePackages = { "me.myorg.myapp.services", "me.myorg.myapp.web" }, 
    basePackageClasses = { me.myorg.myapp.config.MyDbConfig.class }) 
public class MyAppConfig { ... } 

還值得指出的是,您可以創建大量的公共靜態配置子類。這些將被組件掃描忽略,但可以正常導入其他配置類。這可以在上述情況下非常有用,如果你想只掃描每個包,但隨後選擇掃描或導入子類:

public class BaseConfig { 

    @Configuration 
    public static class DbConfigA {...} 

    @Configuration 
    public static class DbConfigB {...} 

} 

@Configuration 
@ComponentScan(
    basePackages = { "me.myorg.myapp" }, 
    basePackageClasses = { DbConfigA.class }) 
public class MyAppConfig { ... } 
+0

感謝兩種解決方案,我認爲這會爲我所需要的工作帶來極大。 –