使用纯Java配置Spring MVC的方式需要借助于Spring的WebApplicationInitializer接口。WebApplicationInitializer是一个接口,它被用来实现ServletContextInitializer,在servlet3.0+容器中被自动使用。在这里,我们将WebApplicationInitializer用于配置Spring MVC,而不需要使用web.xml。
下面是完整的步骤:
- 配置DispatcherServlet
在Java config文件中创建DispatcherServlet bean。获取默认的加载分支(servletMappings())并将其替换为/。
@Configuration
public class AppConfig {
@Bean
public DispatcherServlet dispatcherServlet(){
return new DispatcherServlet();
}
@Bean
public ServletRegistrationBean dispatcherServletRegistration(){
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet(), "/");
registration.setName("springmvc");
return registration;
}
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping(){
return new RequestMappingHandlerMapping();
}
}
- 配置Spring MVC组件扫描
可以使用@Configuration + @ComponentScan注解配置Spring MVC组件扫描。这里需要指定Spring MVC controller的基础包。
@Configuration
@ComponentScan(basePackages = "com.example.controller")
public class MvcConfig {
}
- 配置Spring MVC 视图解析器
在Java config文件中创建InternalResourceViewResolver bean。它应该映射所有的视图到/WEB-INF/views/.
@Configuration
public class MvcConfig {
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
- 注册Spring MVC拦截器
Spring MVC拦截器是一种可以捕获Web请求和响应的方式,以允许对它们进行修改或添加额外的功能。
@Configuration
public class MvcConfig {
@@Bean
public InterceptorRegistry interceptorRegistry(){
return new InterceptorRegistry();
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(loginInterceptor());
}
}
- 配置Spring多文件上传支持
为了支持Spring多文件上传,需要使用MultipartConfigElement类来配置MultipartFilter bean。
@Configuration
public class MvcConfig {
@Bean
public FilterRegistrationBean multipartFilterRegistration(){
MultipartConfigElement multipartConfig = new MultipartConfigElement("");
return new FilterRegistrationBean(new MultipartFilter(multipartConfig));
}
}
- 将Spring Java config添加到Servlet 3.0 JDK容器中
最后,在应用程序中添加WebApplicationInitializer实现:
public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(MvcConfig.class, AppConfig.class);
servletContext.addListener(new ContextLoaderListener(ctx));
ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcherServlet",
new DispatcherServlet(ctx));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
以上是使用纯Java config来配置Spring MVC的完整攻略。下面有两个示例说明:
示例1:使用Java config配置Spring MVC用于处理Web请求
例如,假设你有一个Spring MVC应用程序,它的核心业务逻辑主要是处理单个/请求。可以通过以下步骤使用Java config来配置Spring MVC。
- 创建AppConfig.java
首先,需要创建一个Java config文件(例如:AppConfig.java),它应该使用@Configuration注解标注,因为它将会包含所有的Spring bean 和配置。
@Configuration
public class AppConfig {
@Bean
public HomeController homeController() {
return new HomeController();
}
}
- 创建HomeController.java
然后,需要创建一个HomeController.java文件。它应该处理/请求并返回一个字符串。
public class HomeController {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
}
- 创建MvcConfig.java
这是一个包含所有Spring MVC配置的Java config文件(例如:MvcConfig.java)。它包含有关Spring MVC的所有信息,并使用@EnableWebMvc注解告诉Spring构建一个由Spring MVC控制的Web应用程序。
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.example.controller"})
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/")
.setViewName("forward:/index.html");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("/static/");
}
}
- 创建入口点
最后,需要创建一个应用程序入口点(例如:Main.java)。它应该使用Spring的Java config类创建一个应用程序上下文,并使用该上下文创建一个Web服务器。
public class Main {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class, MvcConfig.class);
ctx.refresh();
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
HttpContext context = server.createContext("/");
context.setHandler(new SpringHttpHandlerAdapter(ctx));
server.start();
}
}
示例2:使用Java config配置Spring MVC用于单元测试
在许多情况下,单元测试是验证应用程序行为的一种首选方式。下面是一些使用Java config配置Spring MVC单元测试的步骤:
- 创建AppConfig.java
首先,需要创建一个Java config文件(例如:AppConfig.java),它应该使用@Configuration注解标注,并包含所有的Spring bean 和配置。
@Configuration
public class AppConfig {
@Bean
public HomeController homeController() {
return new HomeController();
}
}
- 创建HomeController.java
然后,需要创建一个HomeController.java文件。它应该处理/请求并返回一个字符串。
public class HomeController {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
}
- 创建MvcConfig.java
这是一个包含所有Spring MVC配置的Java config文件(例如:MvcConfig.java)。它包含有关Spring MVC的所有信息,并使用@EnableWebMvc注解告诉Spring构建一个由Spring MVC控制的Web应用程序。
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.example.controller"})
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/")
.setViewName("forward:/index.html");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("/static/");
}
}
- 创建单元测试
最后,需要创建一个单元测试类(例如:HomeControllerTest.java)。在该测试类中,可以使用SpringJUnit4ClassRunner类来运行测试,并通过配置testDispatcherServlet等bean来启用Spring MVC框架。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class, MvcConfig.class})
@WebAppConfiguration
public class HomeControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
.build();
}
@Test
public void testHome() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World!"));
}
}
以上就是使用纯Java config来配置Spring MVC的完整攻略,和两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用纯java config来配置spring mvc方式 - Python技术站