用javaConfig注解创建spring 工程的基本配置

来源:互联网 发布:手机快递入库软件 编辑:程序博客网 时间:2024/05/19 08:04

最近刚看了spring实战第四部  自己也用javaconfig的方式创建了一个简单的web工程 记录下心得

首先用javaconfig创建spring web工程的时候 还是是否简单的 只需要继承AbstractAnnotationConfigDispatcherServletInitializer的实现接可以

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    @Override    protected Class<?>[] getRootConfigClasses() {        return new Class<?>[]{RootConfig.class};    }    @Override    protected Class<?>[] getServletConfigClasses() {        return new Class<?>[]{WebConfig.class};    }    @Override    protected String[] getServletMappings() {        return new String[]{"/"};    }}

RootConfig和WebConfig 就是spring的配置文件

如果用传统的web.xml结合javaconfig的方式 也是很简单的

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>spittr</display-name><!-- 使用java配置 --><context-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></context-param><!-- - Location of the XML file that defines the root application context. - Applied by ContextLoaderListener. --><context-param><param-name>contextConfigLocation</param-name><!-- <param-value>classpath:spring/application-config.xml</param-value> --><param-value>spittr.config.RootConfig</param-value></context-param><!-- 设置开发模式 --><context-param><param-name>spring.profiles.default</param-name><param-value>dev</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- <filter> <filter-name>springSecurityFilterChian</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> --><!-- - Servlet that dispatches request to registered handlers (Controller implementations). --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 使用java配置 --><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param><init-param><param-name>contextConfigLocation</param-name><param-value>spittr.config.WebConfig</param-value></init-param><!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-config.xml</param-value> </init-param> --><load-on-startup>1</load-on-startup><multipart-config><location>/tmp/spittr/uploads</location><max-file-size>2097152</max-file-size><max-request-size>4194304</max-request-size></multipart-config></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

重点是使用 AnnotationConfigWebApplicationContext 通知用注解的方式加载
<!-- 使用java配置 --><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param>
然后就是 RootConfig和WebConfig 这两个文件了

RootConfig.java 就相当 application-context.xml

@Configuration@ComponentScan(basePackages = {"spittr"}, excludeFilters = {        @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})@Import({SecurityConfig.class, DataSourceConfigDataSource.class})@PropertySource("classpath:config.properties")//@ActiveProfiles("dev")public class RootConfig {    @Autowired    Environment env;        @Bean    public MessageSource messageSource() {        ReloadableResourceBundleMessageSource messageSoure = new ReloadableResourceBundleMessageSource();        messageSoure.setBasename("classpath:message");        return messageSoure;    }}
@Configuration 表示该类为配置类

@ComponentScan注解扫描路径

@Import 导入其他的配置类

@@PropertySource 加载配置文件


WebConfig.java 相当于dispatcher-servlet.xml

@Configuration@EnableWebMvc@ComponentScan(basePackages = "spittr.web", useDefaultFilters = false, includeFilters = {        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = ControllerAdvice.class)})public class WebConfig extends WebMvcConfigurerAdapter {    @Bean    public ViewResolver viewResolver() {        InternalResourceViewResolver resolver = new InternalResourceViewResolver();        resolver.setPrefix("/WEB-INF/view/");        resolver.setSuffix(".jsp");        resolver.setExposeContextBeansAsAttributes(true);        return resolver;    }     // 添加静态资源映射   @Override   public void addResourceHandlers(ResourceHandlerRegistry registry) {     registry.addResourceHandler("/res/**").addResourceLocations("/WEB-INF/resources/");                //registry.addResourceHandler("/js/**").addResourceLocations("/WEB-INF/resources/js/");        //registry.addResourceHandler("/css/**").addResourceLocations("/WEB-INF/resources/css/");        //registry.addResourceHandler("/images/**").addResourceLocations("/WEB-INF/resources/images/");       }   @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable();    }        /**     * 编码 及 json解析     */    @Override    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {        //主要针对 IE返回json为下载的问题        List<MediaType> jsonSupportedMediaTypes = new ArrayList<MediaType>();        jsonSupportedMediaTypes.add(MediaType.TEXT_PLAIN);        List<MediaType> textSupportedMediaTypes = new ArrayList<MediaType>();        textSupportedMediaTypes.add(MediaType.TEXT_PLAIN);        textSupportedMediaTypes.add(MediaType.TEXT_HTML);        // 定义json解析器的返回类型        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();        mappingJackson2HttpMessageConverter.setDefaultCharset(Charset.forName("utf-8"));        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();        supportedMediaTypes.addAll(jsonSupportedMediaTypes);        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);        converters.add(mappingJackson2HttpMessageConverter);        super.configureMessageConverters(converters);    }}

基本这些简单的配置 spring web就搭建起来了












4 0
原创粉丝点击