使用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 }
posted @ 2020-05-06 22:17  zenglintao(雪落)  阅读(1080)  评论(1编辑  收藏  举报