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