且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

春天基本的MVC示例应用程序,标注混乱扫描

更新时间:2022-10-21 15:25:15

背景:组件扫描的清晰


  

中扫描将自动注册为Spring bean的注释组件的类路径。 默认,由Spring提供的@Component,@Repository,@Service和@Controller定型被检测到。


块引用>

所以@Controller只是一个Spring bean。没有别的。

MVC:注解驱动


  

注册HandlerMapping的和需要的HandlerAdapter 以请求分派给您@Controllers


块引用>

这是类似

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

如果我需要一个以上的包,我只是重复的条目?

您可以的,如果你想要的。的背景:组件扫描只是一个bean后处理器

 <背景:组件扫描基包=br.com.app.view.controller/>
<背景:组件扫描基包=br.com.app.service/>

或者


  

使用逗号分隔的包的列表,以扫描注释部分。


块引用>
 <背景:组件扫描基包=br.com.app.view.controller,br.com.app.service/>

Little confused, the basic spring mvc app has this:

app-config.xml

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

and the mvc-config.xml has:

<!-- Configures the @Controller programming model -->
    <mvc:annotation-driven />

  1. Do you really need both?

  2. for component-scan, does this mean if I don't put the correct package path my @Controller and @Service markers will have no effect? If I need more than one package, do I just duplicate the entry?

I tried using just the mvc:annotation-driven but that didn't work, I had to put com.example.web.controllers in the component-scan xml node to make it work.

context:component-scan is clear

Scans the classpath for annotated components that will be auto-registered as Spring beans. By default, the Spring-provided @Component, @Repository, @Service, and @Controller stereotypes will be detected.

So @Controller is just a Spring bean. Nothing else.

And

mvc:annotation-driven

registers the HandlerMapping and HandlerAdapter required to dispatch requests to your @Controllers

Which is similar to

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

If I need more than one package, do I just duplicate the entry?

You can if you want. context:component-scan is just a bean post-processor.

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

Or

Use a comma-separated list of packages to scan for annotated components.

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