全注解开发
第一部分 :
1.1 消除spring-mvc.xml
这些是原来spring-mvc.xml配置文件的内容
<!--1、组件扫描, 使@Controller可以被扫描到-->
<context:component-scan base-package="com.itheima.controller"/>
<!--2、非自定义的Bean, 文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="5000000"/>
</bean>
<!--3、非Bean的配置-->
<!--mvc的注解驱动 ,向容器中注入功能性的bean(映射器适配器等)-->
<mvc:annotation-driven/>
<!--向容器中注册静态资源处理器-->
<mvc:default-servlet-handler/>
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.itheima.interceptors.MyInterceptor1"></bean>
</mvc:interceptor>
</mvc:interceptors>
我们来用配置类来代替
1 组件扫描代替
@ComponentScan({"com.itheima.controller"})
2 非自定义bean代替
@Bean
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("UTF-8");
multipartResolver.setMaxUploadSize(5000000);
return multipartResolver;
}
3 非bean的配置
<mvc:annotation-driven/>mvc注解驱动 :
在配置类上加@EnableWebMvc即可 , 注解自带这个功能
其余两个配置 , 需要新建一个WebMvcConfigurer类 , 去实现相关功能
具体步骤如下
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
//开启默认的Servlet处理器
configurer.enable();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加一个拦截器,并配置拦截路径
registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**");
}
}
1.2 加载核心配置类
(不重要 , 当学习消除web.xml时 , 这些会被替代
两部 , 1 定义一个类注册核心配置类 ,2 在web.xml记载核心配置类 )
第二部分 :
消除web.xml
建一个类继承AbstractAnnotationConfigDispatcherServletInitializer类 , 重写方法加载配置类即可
代码如下
public class MyAbstractAnnotationConfigDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
//提供Spring容器的核心配置类
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
//提供SpringMVC容器的核心配置类
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMVCConfig.class};
}
@Override
//提供前端控制器的映射路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
}