@Controller,@requestmapping,组件扫描和springmvc的组件解析

@Controller注解用来做什么的?

以前在编写Controller方法的时候,需要开发者自定义一个Controller类实现Controller接口,实现handleRequest方法返回ModelAndView。并且需要在Spring配置文件中配置Handle,将某个接口与自定义Controller类做映射。

这么做有个复杂的地方在于,一个自定义的Controller类智能处理一个单一请求。而在采用@Contoller注解的方式,可以使接口的定义更加简单,将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。

被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。

Spring如何通过注解注入?
大家仔细想一下,为什么打上注解了就能实现接口功能了呢?换句话说,Spring怎么样找到开发者自定义的Controller把对应的请求分发到对应的方法上呢?

首先,要在Spring配置文件的头文件中引入spring-context。
其次,使用context:component-scan元素启动“包扫描”功能。
例如

base-package是值是包的路径。意思就是,启动了报扫描功能,将com.myz.controller这个包下以及子包下的所有类扫描一遍,将标记有@Controller、@Service、@repository、@Component等注解的类注入到IOC容器中,作为Spring的Bean来管理。

这样,Spring就能找到Controller类,通过@RequestMapping注解处理对应的请求。
在SpringMVC中用于参数绑定的注解还有很多,它们都在org.springframework.web.bind.annotation包下。
● 处理request body的常用注解:@RequestParam, @RequestBody
● 处理request uri的常用注解:@PathVariable
● 处理request header的常用注解:@RequestHeader, @CookieValue
● 处理attribute的常用注解:@SessionAttributes, @ModelAttribute@Controller,@requestmapping,组件扫描和springmvc的组件解析_第1张图片

@RequestMapping

:用于建立请求 URL 和处理请求方法之间的对应关系

位置:
1。类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
2。方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录拼接组成访问虚拟路径

属性:
value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样

例如:
params = {“accountName”},表示请求参数必须有accountName
params = {“moeny!100”},表示请求参数中money不能是100
在这里插入图片描述

组件扫描

SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器中,如果使用@Controller注解标注的话,就需要使用进行组件扫描。

    <context:component-scan base-package="com.itheima">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

//   //扫描除controller以外的包
    </context:component-scan>

springMVC的组件解析

@Controller,@requestmapping,组件扫描和springmvc的组件解析_第2张图片
①用户发送请求至前端控制器DispatcherServlet。
②DispatcherServlet收到请求调用HandlerMapping处理器映射器。
③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及理器拦截器(如果有则生成)一并返回给DispatcherServlet。
④DispatcherServlet调用HandlerAdapter处理器适配器。
⑤HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
⑥Controller执行完成返回ModelAndView。
⑦HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
⑧DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
⑨ViewReslover解析后返回具体View。
⑩DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。

总结就是:找,做,看

你可能感兴趣的:(spring常用框架)