使用java类代替web.xml配置(实训项目开发)

我的博客园地址: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();
    }
}

猜你喜欢

转载自blog.csdn.net/zenglintao/article/details/105960425