我的博客园地址:https://www.cnblogs.com/zenglintao/p/12839510.html
使用spring-webmvc依赖包中的AbstractAnnotationConfigDispatcherServletInitializer抽象方法代替web项目中的xml配置。
AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动配置DispatcherServlet和Spring应用上下文,Spring应用上下文会位于应用程序的servlet上下文中。
使用Java类代替web.xml的配置非常简单,完全可以套用模板,下面就是代码
1.编写总配置类
public class EpidemicApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 用来配置ContextLoaderListener创建对应上下文的bean
* @return
*/
@Override
protected Class<?>[] getRootConfigClasses() {
//Spring相关配置
return new Class[]{SpringConfig.class};
//花括号内填写Spring配置的类名或者路径,这里的名字是SpringConfig.class
}
/**
* 用于定义DispatcherServlet应用上下文的bean
* @return
*/
@Override
protected Class<?>[] getServletConfigClasses() {
//SpringMVC相关配
return new Class[]{SpringMVCConfig.class};
//花括号内填写SpringMvc配置的类名或者路径,这里的名字是SpringMVCConfig.class
}
/**
* 配置拦截器
* @return
*/
@Override
protected String[] getServletMappings() {
//返回映射到DispatcherServlet(前端控制器)的请求路径
return new String[]{"/"};
//花括号内填写需要拦截的页面,
}
}
如果使用idea开发项目,在需要重写方法时可以使用alt+insert键来快速重写方法
2.编写Spring配置类
使用@Configuration、@ComponentScan(组件扫描)和@EnableTransactionManagement等注解标签配置
① @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
② @ComponentScan 注解默认会扫描该类所在的包下所有的配置类,相当于之前的<context:component-scan>
③ @EnableTransactionManagement 用于开启事务支持
/**
* Spring相关配置(替换掉了spring-bean.xml和spring-tx.xml)
*/
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Controller.class))
@EnableTransactionManagement //启用事务管理器
public class SpringConfig {
@Bean
/*
*平台事务管理器,这里的方法名是transactionManager
*/
public PlatformTransactionManager transactionManager(DataSource dataSource){
//创建数据源事务管理器,数据源可以在MyBatis里配置
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
//DataSourceTransactionManager实现类
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
3.编写SpringMvc配置类
@Autowired 注解可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
/**
* springmvc相关配置(替换掉了springmvc.xml)
*/
@Configuration
@EnableWebMvc
@ComponentScan(includeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Controller.class))
//继承WebMvcConfigurationSupport类也可以,但是这个类需要重写的方法比较多,所以这里继承了WebMvcConfigurerAdapter类
public class SpringMVCConfig extends WebMvcConfigurerAdapter {
@Autowired
private DateConverter dateConverter;
/**
* 添加视图控制器,如果没有指定,就默认访问这个界面
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("epidemic");//访问的是epidemic.jsp,如果扩展名就需要配置视图解析器来定义扩展名
}
/**
* 配置视图解析器(前后缀)
* @param registry
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
//定义了一个内部资源视图解析器(InternalResourceViewResolvers)
registry.jsp("/",".jsp");
}
/**
* 配置日期转换器
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(dateConverter);
}
/**
* 如果没有匹配到action.就使用servlet默认的访问
* @param configurer
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
//简单来说,就是为给静态资源放行
configurer.enable();
}
}