Day72-回顾SpringMVC篇之处理器映射器与处理器适配器最佳实践
-
组件自动扫描
web开发中,我们基本上不在通过xml或者java配置来创建一个bean的实例,而是直接通过组件扫描实现bean的配置,如果过要扫描过个包,多个包之间用,隔开即可:
<!--配置包扫描--> <context:component-scan base-package="com.fu" use-default-filters="true"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan>
-
handlerMapping
正常情况下,我们在项目汇总使用的是RequestMappingHandlerMapping,这个是根据处理器中的注解,来匹配请求(即@RequestMapping注解中url属性).因为我们都是同过实现类来开发接口的,相当于还是一个类一个接口,所以我们可以通过RequestMappingHandlerMapping来做处理器映射器,这样我们可以在一个类中开发出多个接口.
- handlerAdater
对于上面提到的通过@RequesMapping注解所定义出来的接口方法,这些方法的调用都是通过RequestMaHandlerAdapter这个适配器来实现.
例如我们开发一个接口:
package com.fu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView hello(){
ModelAndView mv = new ModelAndView("hello");
mv.addObject("name","fushijie");
return mv;
}
}
要能够访问这个接口,我们需要RequestMappingHandlerMapping才能定位带需要执行的方法,需要RequestMapingHandlerAdater,才能执行定位到的方法,修改SpringMVC的配置文件如下:
<!--配置包扫描-->
<context:component-scan base-package="com.fu" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--<!–配置处理器映射器器–>-->
<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"-->
<!--id="requestMappingHandleMapping"/>-->
<!--<!–配置处理器适配器–>-->
<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"-->
<!--id="requestMappingHandlerAdapter"/>-->
<!--此配置可代替上面映射器和适配器配置-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
然后启动项目,访问localhost:8080/hello,就可以看到相应的页面.
-
继续优化
由于开发中,我们常用的是RequestMappingHandlerMapping和RequestMappingHandlerAdater,这两个有一个简化的写法,如下:
<!--此配置可代替上面映射器和适配器配置--> <mvc:annotation-driven/>
可以用这一行配置,代替RequestMappingHandlerMapping和RequestMappingHandlerAdapter的两行配置.这就是实际开发最终配置的形态.