创建工程
创建一个普通的Maven工程(注意,这里可以不必创建Web工程),并添加SpringMVC的依赖,同时,这里环境的搭建需要用到Servlet,所以我们还需要引入Servlet的依赖(一定不能使用低版本的Servlet),最终的pom.xml文件如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactid>
<version>4.0.1</version>
<scope> provided</scope>
</dependency>
添加spring配置
工程创建成功之后,首先添加 Spring 的配置文件,如下:
@Configuration
@ComponentScan(basePackages = "org.javaboy", useDefaultFilters = true, excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class)})
public class SpringConfig {
}
关于这个配置,如下几点:
@Configuration 注解表示这是一个配置类,在我们这里,这个配置的作用类似于 applicationContext.xml
@ComponentScan 注解表示配置包扫描,里边的属性和 xml 配置中的属性都是一一对应的,
useDefaultFilters 表示使用默认的过滤器,然后又除去 Controller 注解,
即在 Spring 容器中扫描除了 Controller 之外的其他所有 Bean 。
添加 SpringMVC 配置
接下来再来创建 springmvc 的配置文件:
@Configuration
@ComponentScan(basePackages = "org.javaboy",useDefaultFilters = false,includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
public class SpringMVCConfig {
}
注意:如果不需要在 SpringMVC 中添加其他的额外配置,这样就可以了。即 视图解析器、
JSON 解析、文件上传......等等,如果都不需要配置的话,这样就可以了。
配置 web.xml
此时,我们并没有 web.xml 文件,这时,我们可以使用 Java 代码去代替 web.xml 文件,这里会用到 WebApplicationInitializer ,具体定义如下:
public class WebInit implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
//首先来加载 SpringMVC 的配置文件
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMVCConfig.class);
// 添加 DispatcherServlet
ServletRegistration.Dynamic springmvc = servletContext.addServlet("springmvc", new DispatcherServlet(ctx));
// 给 DispatcherServlet 添加路径映射
springmvc.addMapping("/");
// 给 DispatcherServlet 添加启动时机
springmvc.setLoadOnStartup(1);
}
}
WebInit 的作用类似于 web.xml,这个类需要实现 WebApplicationInitializer 接口,
并实现接口中的方法,当项目启动时,onStartup 方法会被自动执行,我们可以在这个方法
中做一些项目初始化操作,例如加载 SpringMVC 容器,添加过滤器,
添加 Listener、添加 Servlet 等。
注意:
由于我们在 WebInit 中只是添加了 SpringMVC 的配置,这样项目在启动时只会去加载
SpringMVC 容器,而不会去加载 Spring 容器。
如果一定要加载 Spring 容器,需要我们修改 SpringMVC 的配置。
在 SpringMVC 配置的包扫描中也去扫描 @Configuration 注解,进而加载Spring容器。
还有一种方案可以解决这个问题,就是直接在项目中舍弃 Spring 配置,直接将所有配置
放到 SpringMVC 的配置中来完成,这个在 SSM 整合时是没有问题的。
在实际开发中,较多采用第二种方案,第二种方案,SpringMVC 的配置如下:
@Configuration
@ComponentScan(basePackages = "org.javaboy")
public class SpringMVCConfig {
}
这种方案中,所有的注解都在 SpringMVC 中扫描,采用这种方案的话,则 Spring 的配置文件就可以删除了。
测试
最后,添加一个 HelloController ,然后启动项目进行测试:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
启动项目,访问接口,结果如下: