2010-07-01 22 views
7

poco confuso, la molla di base app mvc ha questo:molla applicazione di esempio mvc base, annotazione confusione scansione

app-config.xml

<context:component-scan base-package="org.springframework.samples.mvc.basic" /> 

e mvc-config.xml trovi:

<!-- Configures the @Controller programming model --> 
    <mvc:annotation-driven /> 
  1. non si ha realmente bisogno di entrambi?

  2. per scansione componenti, questo significa che se non inserisco il percorso del pacchetto corretto i miei marcatori @Controller e @Service non avranno alcun effetto? Se ho bisogno di più di un pacchetto, posso semplicemente duplicare la voce?

Ho provato ad utilizzare solo il MVC: annotazioni-driven, ma che non ha funzionato, ho dovuto mettere com.example.web.controllers nel nodo XML componente-scan per farlo funzionare.

risposta

11

context: component-scan è chiaro

scansioni del percorso di classe per i componenti annotati che verranno automaticamente registrati come fagioli primavera. Per impostazione predefinita,, verranno rilevati gli stereotipi @Component, @Repository, @Service e @Controller forniti da Spring.

Quindi @Controller è solo un bean Spring. Nient'altro.

E

MVC: annotazione-driven

registri HandlerMapping e HandlerAdapter tenuti di inviare richieste ai vostri @Controllers

che è simile a

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

Se ho bisogno di più di un pacchetto, posso semplicemente duplicare la voce?

È possibile se lo si desidera. Contesto : componente-scanè solo un post-processore di bean.

<context:component-scan base-package="br.com.app.view.controller"/> 
<context:component-scan base-package="br.com.app.service"/> 

O

utilizzare un elenco separato da virgole di pacchetti per la scansione per i componenti annotati.

<context:component-scan base-package="br.com.app.view.controller,br.com.app.service"/> 
+1

Solo per curiosità: contesto: component-scan include AutowiredAnnotationBeanPostProcessor e CommonAnnotationBeanPostProcessor che significa che i due componenti sono rilevati automaticamente e cablati insieme - ** tutto senza metadati di configurazione del bean forniti in XML ** –

+0

Grazie, non volevo fare br.com.app poiché eseguirà la scansione di potenzialmente più classi del necessario. Bella risposta! btw qual è il diff tra un @component e @service? – Blankman

+0

@Blankman Nessuno. @Service è anche un'annotazione @Component. Vedi qui: http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/stereotype/Service.html È solo un metadata speciale a ** denotare un componente di servizio nel livello di servizio * *. –

1
  1. mvc:annotation-driven consente di configurare il comportamento di Spring MVC. Vedere i dettagli in documentation. Per l'utilizzo di base di Spring MVC non è necessario.
  2. Se avete bisogno di più di un pacchetto di solo citare Genitore unico: <context:component-scan base-package="org.springframework.samples.mvc" />
+0

in modo da avere MVC: annotazione-driven è non fare nulla? – Blankman

+0

No, 'mvc: annotation-driven' consente di configurare il comportamento di Spring MVC. Vedere i dettagli nella documentazione http://static.springsource.org/spring/docs/3.0.3.RELEASE/spring-framework-reference/html/mvc.html#mvc-annotation-driven Per l'utilizzo di base di Spring MVC si non ne hai bisogno. – uthark

Problemi correlati