Javaconfig配置springmvc

时间:2020-08-26 14:26:14   收藏:0   阅读:81
Javaconfig配置springmvc
1.建立maven工程导入相关的包
 
<?xml version="1.0" encoding="UTF-8"?>
 
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
 
  <groupId>org.example</groupId>
  <artifactId>springmvc-noxml-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
 
 
  <name>springmvc-noxml-demo Maven Webapp</name>
  <!-- FIXME change it to the project‘s website -->
  <url>http://www.example.com</url>
 
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <spring.version>5.1.6.RELEASE</spring.version>
  </properties>
 
 
  <dependencies>
    <!--spring 核心包-->
    <!-- spring start -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    
    <!--引入json,返回前端json数据-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.6</version>
    </dependency>
 
 
 
 
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--aop-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.9</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.18</version>
      <scope>provided</scope>
    </dependency>
    <!-- spring end -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--日志-->
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.8.0-alpha0</version>
      <scope>test</scope>
    </dependency>
 
 
 
 
    <!--j2ee相关包 servlet、jsp、jstl-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>springmvc-noxml-demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
二、用 JavaConfig 替代 web.xml 中 servlet 配置及监听配置
  public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer:  
    WebInitializer继承关系链:
    WebInitializer -->AbstractAnnotationConfigDispatcherServletInitializer -->AbstractDispatcherServletInitializer -->
    AbstractContextLoaderInitializer -->WebApplicationInitializer
    实现 WebApplicationInitializer 接口,就等同于 web.xml 配置
    @Override public void onStartup :
      web.xml 核心的相关配置,可再此方法中重写 自定义的配置 ,如:<filter> 可用 FilterRegistration.Dynamic encodingFilter 此种方式来配置。
    @Override protected Class<?>[] getRootConfigClasses :
      重写此方法,以替代 spring-context.xml ,在这个方法中返回的 类类型数组 可配置上下文中需要的 bean ,如数据库,缓存 等等。
    @Override protected Class<?>[] getServletConfigClasses:
      重写此方法,以替代 spring-mvc.xml ,在这个方法中返回的类型数组 可配置 spring 中 视图解析器,http message converter 等框架需要的 bean。
    @Override protected String[] getServletMappings :      
      重写此方法,就相当于 <servlet-mapping> 节点等同的功能,可指定 站点根路径。
  public class WebConfig implements WebMvcConfigurer :
    @EnableWebMvc:注解会开启一些默认配置,如:ViewResolver MessageConverter 等,若无此注解,重写 WebMvcConfigurerAdapter 方法无效。
    @ComponentScan:会扫描指定包中的类,根据注解,将特定类初始化为 上下文中需要的 bean 。
    @Override public void addViewControllers :
      重写 addViewControllers 简化页面快捷转向,这样就可以不用配置 Controller 了(就是那些仅返回一个页面路径的简单 controller )。
    @Bean public InternalResourceViewResolver viewResolver :
      配置JSP视图解析器
    @Override public void addResourceHandlers :
      配置静态文件处理
MyDispatcherInitializer类,代替web.xml
 
public class MyDispatcherInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 
 
    // root配置类初始化
    // 指定 Root WebApplicationContext 类,这个类必须@Configuration来注解,从而代替XML配置文件
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringCnfiguration.class};
    }
    // web配置类初始化
    // 指定 Servlet WebApplicationContext 类,这个类必须@Configuration来注解,从而代替XML配置文件
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfiguration.class};
    }
// 映射根路径初始化
    // 指定 Servlet mappings
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
 
 
    //配置字符过滤器
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(false);
        return new Filter[]{characterEncodingFilter};
    }
}
 
 
SpringCnfiguration,代替applicationContext.xml
 
//spring的配置文件,扫描包,除了controller注解
@Configuration
@ComponentScan(value = "com.zy",excludeFilters = {@Filter(type = FilterType.ANNOTATION,value = {Controller.class})})
public class SpringCnfiguration {
}
 
 
WebConfiguration,代替spring-mvc.xml
/**
   * @EnableWebMvc 注解会开启一些默认配置,如:ViewResolver MessageConverter 等,等同于<mvc:annotation-driven></>
   * 若无此注解,重写 WebMvcConfigurerAdapter 方法无效,等同
2 * */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.zy.controller")
public class WebConfiguration implements WebMvcConfigurer {
    
    //配置jsp view
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        resolver.setOrder(2);//设置优先级
        resolver.setCache(false);
        return resolver;
    }
    
    //  配置静态资源的处理
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    //配置静态资源访问
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/statics/**").addResourceLocations("/statics/");
    }
    //一些简单的controller处理,直接返回相应的界面
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("hello");
    }
    
    //吧自定义的拦截器加入容器
    @Bean
    public MyInterceptor myInterceptor(){
        return new MyInterceptor();
    }
    //添加上面配置好的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(myInterceptor());
    }
    
}
 
 

原文:https://www.cnblogs.com/zhouyanger/p/13564604.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!