2013-04-26 13 views
32

Spesifik paketlere süzgeç İlkbaharda XML tabanlı Java tabanlı yapılandırmaya geçmek istiyorum.@ComponentScan

<context:component-scan base-package="foo.bar"> 
    <context:exclude-filter type="annotation" expression="o.s.s.Service"/> 
</context:component-scan> 
<context:component-scan base-package="foo.baz" /> 

Ama

@ComponentScan(
    basePackages = {"foo.bar", "foo.baz"}, 
    excludeFilters = @ComponentScan.Filter(
     value= Service.class, 
     type = FilterType.ANNOTATION 
    ) 
) 

böyle bir şey ... yazarsanız ... o hem paketlerden hizmetleri hariç tutar: Şimdi bizim uygulama bağlamında böyle bir şey var. Ben utanç verici önemsiz bir şey bakan güçlü hissediyorum var, ama ben foo.bar filtrenin kapsamını sınırlamak için bir çözüm bulamadık.

cevap

38

İhtiyacınız olan iki @ComponentScan ek açıklaması için iki Config sınıfı oluşturmanız yeterlidir.

Yani, örneğin size foo.bar paket için bir Config sınıf olurdu: o zaman

@Configuration 
@ComponentScan(basePackages = {"foo.bar"}, 
    excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION) 
) 
public class FooBarConfig { 
} 

ve 2 Config sınıf sizin foo.baz paketi için: o zaman

@Configuration 
@ComponentScan(basePackages = {"foo.baz"}) 
public class FooBazConfig { 
} 

Bahar bağlamı sen başlatmasını Aşağıdakileri yapar:

new AnnotationConfigApplicationContext(FooBarConfig.class, FooBazConfig.class); 

Alternatif olarak,sınıfını almak için ilk Config sınıfındaki @org.springframework.context.annotation.Import ek notunu kullanabilirsiniz. Yani, örneğin olmak FooBarConfig değişebilir: Service.class` `ne olur

new AnnotationConfigApplicationContext(FooBarConfig.class) 
+0

:

@Configuration @ComponentScan(basePackages = {"foo.bar"}, excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION) ) @Import(FooBazConfig.class) public class FooBarConfig { } 

Sonra sadece ile bağlam başlayacaktı? – Deepen

İlgili konular