2011-03-11 15 views
149

Jak dodać wiele pakietów w pliku spring-servlet.xml w elemencie context:component-scan?wiele pakietów w kontekście: komponent scan, konfiguracja wiosna

Próbowałem

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" /> 

i

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

i

<context:component-scan base-package="x.y.z.service" /> 
<context:component-scan base-package="x.y.z.controller" /> 

ale mam błąd:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency: 

Odpowiedz

217

następujące podejście jest poprawne:

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

Należy zauważyć, że błąd narzeka x.y.z.dao.daoservice.LoginDAO, który nie jest w pakietach wspomniano powyżej, być może zapomniał ją dodać:

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 
+0

Tak, tak myślałem (+1) –

+4

Ta odpowiedź sugeruje, że NIE ma rekursji dla członków pakietu podstawowego, ALE tam jest: http://stackoverflow.com/questions/7774295/spring-xml-file-configuration-hierarchy-help-explanation/7774597 # 7774597. Proponuję trochę zmienić odpowiedź, żeby to wyjaśnić. – djangofan

42

Yo u można dodać wiele pakietów bazowej (patrz axtavt's answer), ale można również filter what's scanned wewnątrz pakietu podstawowego:

<context:component-scan base-package="x.y.z"> 
    <context:include-filter type="regex" expression="(service|controller)\..*"/> 
</context:component-scan> 
+0

Dziękuję Panie, teraz pracuje – Shams

+2

@shams ma potrzeby sir mnie, ale jeśli odpowiedź jest prawidłowa, powinieneś oznaczyć ją jako zaakceptowaną (kliknij znacznik wyboru). –

+1

Dlaczego nie możesz dodać wielu pakietów bazowych? Na przykład "org.example, com.example"? –

16
<context:component-scan base-package="x.y.z"/> 

będzie działać, ponieważ pozostałe pakiety są pakietami podrzędnymi z "x.y.z". Dlatego nie musisz wymieniać każdej paczki indywidualnie.

+0

Czuję, że to nie jest prawda ... – elcadro

+25

@elcadro źle się czujesz – NimChimpsky

+2

Ok!Może to był kolejny powód, ale to po prostu nie działało dla mnie ze sprężynowym mvc dla portletów ... – elcadro

31

Podejście Adnotacja

@ComponentScan({ "x.y.z", "x.y.z.dao" }) 
+0

Czy musimy obowiązkowo dodawać określone pakiety, czy może automatycznie skanować pakiety podrzędne, jeśli tylko zdefiniujemy pakiet najwyższego poziomu? –

+0

@NikhilSahu nope, to skanowanie rekurencyjne (Spring 3>) –

4

Innym ogólne podejście Adnotacja:

@ComponentScan(basePackages = {"x.y.z"}) 
0

Jeśli xyz jest wspólny pakiet następnie można użyć:

<context:component-scan base-package="x.y.z.*"> 

będzie obejmować cały pakiet zaczyna się od xyz takich jak: xyzcontroller, xyzservice itp.

0

na przykład masz pakiet „com.abc” i masz wiele pakietów wewnątrz niego, można użyć jak

@ComponentScan("com.abc") 
Powiązane problemy