SpringMVC:Maven构建SpringMVC简单配置(JavaConfig版)
来源:互联网 发布:820空心杯淘宝 编辑:程序博客网 时间:2024/06/05 09:54
JavaConfig方式使用SpringMVC只适合支持Serlvet3.0+的容器
JavaConfig版更加健壮
喜欢XML方式,移步XML版SpringMVC快速构建
实现同样的简单功能,但是这次我们使用JavaConfig方式,既然是JavaConfig方式那就必然会有Configuration类了。延续XML版配置我们的配置将WebApplicationContext(DispatcherServlet)和ApplicationContext(ContextLoaderListener)分开。
最关键的类来了!!!
MyApplicationInitializer.java
MyApplicationInitializer继承自AbstractAnnotationConfigDispatcherServletInitializer
这个类中有三个基本的需要被实现的方法:
protected Class<?>[] getRootConfigClasses() 返回一个Class<?>[] 该方法用于ApplicationContext的初始化,对应web.xml中配置ContextLoaderListener的初始化参数:contextConfigLocation。只是这类是配置@Configruation的类,而不在是xml文件路径。 protected Class<?>[] getServletConfigClasses() 配置DispatcherServlet的@Configruation类 protected String[] getServletMappings() 类似于web.xml中的<mapping-url>,配置拦截url
为什么使用种方式就可以替代web.xml??(前提是Web服务器支持Servlet3.0)
在Servlet3.0下,我们服务器启动后,Web容器(Tomcat等)就会在classpatch下查找接口 javax.servlet.ServletContainerInitializer的实现类来完成Web应用的初始化。
但是我们的Initializer并未间接实现这个接口呦!!!
Spring实现了这个接口,接口实现类为:SpringServletContainerInitializer
但是在此实现类SpringServletContainerInitializer中会反过来查找实现了Spring定义的接口 org.springframework.web.WebApplicationInitializer。
当然了,我们的启动类也就是实现了这个接口所以才能正常启动我们的webApp
package com.xbz.mvc.initializer;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;/** * 该类会在serlvet3.0环境中自动查找实现了 javax.servlet.ServletContainerInitializer接口的类来完成初始化(应该类似于替代web.xml) * 然而我们的这个类与ServletContainerInitializer没有一毛钱关系 * 但是Spring的SpringServletContainerInitializer实现了这个接口 * 在SpringServletContainerInitializer中会查找实现类了WebApplicationInitializer接口的类并将配置任务交给他们完成 * 当然我们的MyApplicationInitializer也就是间接实现了这个接口 * * @author xubaozhong * 而且在继承这个抽象类时,必须实现如下的三个方法 * */public class MyApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ /** * 类似于web.xml中配置ContextLoaderListener的contextConfigLocation * 只是这个返回的是一个JavaConfig的数组Class */ @Override protected Class<?>[] getRootConfigClasses() { // TODO Auto-generated method stub return new Class<?>[]{RootApplicationJavaConfig.class}; } /** * 类似于web.xml中配置DispatcherServlet的contextConfigLocation * 只是这个返回的是一个JavaConfig的数组Class */ @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebApplicationJavaConfig.class}; } /** * 等同于<mapping-url/> */ @Override protected String[] getServletMappings() { return new String[]{"*.action"}; }}
WebApplicationJavaConfig.java
我们的DispatcherServlet配置类
@EnableWebMvc 这个注解类似于XML配置时的<mvc:annotation-driven>
只是类似,因为这个注解默认不会配置ViewResolver,也就是DispatcherServlet会使用默认的配置(具体配置在DispatcherServlet的同包下的DispatcherServlet.properties中查看)
不启动注解扫描
默认的,他也不会启动DefaultServletHttpRequestHandler。就是说所有的请求都是由DispatcherServlet去处理,但是往往静态资源我们不希望也交给DispatcherServlet处理的。
所以我们还要在这个配置类中做一些事情:
使用InternalResourceViewResolver作为视图解析器
启用注解所描
启用DefaultServletHttpRequestHandler处理静态资源请求
package com.xbz.mvc.initializer;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;/** * 作为JavaConfig类,必须有@Configuration注解<br/> * 注解@EnableWebMvc启用SpringMVC,类似于xml中配置 * <mvc:annotation-driven /> * 注意不同点在于<br/> * 1.该注解不会配置ViewResolver。这样SpringMVC会使用默认配置 * 2.不起用注解扫描 * 3.默认情况下不使用默认的Servlet处理访问静态资源(一般我们不会这么做) * @author xubaozhong * */@Configuration@EnableWebMvc@ComponentScan(basePackages={"com.xbz"})public class WebApplicationJavaConfig extends WebMvcConfigurerAdapter { @Bean public ViewResolver internalResourceViewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); resolver.setSuffix(".jsp"); return resolver; } /**配置静态资源处理**/ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }}
RootApplicationJavaConfig .java
这里相当于xml配置ContextLoaderListener的java配置类
这里只需要注意,我们启动注解扫描的时候,过滤掉EnabaleWebMvc.class
package com.xbz.mvc.initializer;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.ComponentScan.Filter;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration@ComponentScan(basePackages={"com.xbz"}, excludeFilters={@Filter(type=FilterType.ANNOTATION,value={EnableWebMvc.class})})public class RootApplicationJavaConfig {}
对于其他Controller、Service、Repository的开发并无影响,也就不再粘贴代码,只是将web.xml的配置替换为JavaConfig方式。
当然这也只是快速搭建的Demo
- SpringMVC:Maven构建SpringMVC简单配置(JavaConfig版)
- SpringMVC:Maven构建SpringMVC简单配置(JavaConfig+web.xml)
- SpringMVC:Maven构建SpringMVC简单配置(XML版)
- SpringMVC JavaConfig配置
- springmvc的javaconfig的配置
- maven构建springmvc+mybaits简单例子
- 二、使用Maven构建配置springMVC项目
- Maven构建SpringMVC项目
- 使用Maven构建SpringMVC
- Maven构建springMVC+mybites
- Maven构建springMVC
- maven构建springMVC环境
- SpringMVC + Maven 构建项目
- Maven构建springMVC
- maven+springmvc+dubbo的简单配置
- SpringMVC简单构建RESTful
- 利用JavaConfig配置Spring及SpringMvc的开发环境
- 构建一个简单的SpringMVC项目(by Maven)
- sys.database_principals (Transact-SQL) 从SQL SERVER数据库中查询安全主体
- view的setTag() 和 getTag()应用
- Java系统中时间封装处理
- Sublime Text 格式化代码
- ZooKeeper客户端Curator使用一 创建连接
- SpringMVC:Maven构建SpringMVC简单配置(JavaConfig版)
- 图结构练习——BFSDFS——判断可达性
- 第二章 构造函数语意学
- php token命令的简单实现,可用于网站平台的对接
- 漫步微积分二十五——面积问题
- Caffe学习资源
- 高级开发进阶
- [图形学] 实时流体模拟中的数学方法
- 数学