略
Spring的配置文件有三种方式:
- 使用xml
- 使用注解
- 使用Java代码
其中:使用xml可以把第三方类(jar包中的)声明为Spring IoC的组件,因为你无法直接在他人的代码中加入Controller,Service,Repository,等注解;使用注解可以很方便的声明自定义的组件到容器中,仅仅通过包扫描就可以使用了.
到后来JavaConfig的方式继承了XML配置的优点,同时使用Java代码还能保证配置的准确性,因为XML如果不借助编辑工具(如IDEA)的检查,很可能出现书写错误的情况,同时JavaConfig的方式还能在装配Bean时,进行更加灵活的配置;
web.xml的转换
先换个话题,探讨web.xml转换为JavaConfig的实现方式,这种方式也是SpringBoot的实现方式,SpringBoot可以把web项目打包成jar,然后直接运行jar,即可打开一个web工程,这里面就可以使用Java代码的方式书写web.xml;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package com.yuda.config;
import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.*;
public class MyWebAppInitializer 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[]{"/"}; } @Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { registration.setMultipartConfig( new MultipartConfigElement("/tmp/uploads")); } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter(); encodingFilter.setEncoding("utf-8"); encodingFilter.setForceEncoding(true); return new Filter[]{encodingFilter}; }
}
|
还有很多配置,后面持续更新
WebConfig.java
Spring-mvc.xml ======> WebConfig.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @Configuration @EnableWebMvc @ComponentScan("com.yuda.web") @ImportResource(value = {"classpath*:mvc-dispatcher-servlet.xml"}) public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setExposeContextBeansAsAttributes(true); return viewResolver; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/test/"); } }
|
还有很多配置,后面持续更新
RootConfig.java
Spring-*.xml ======> RootConfig.java
1 2 3 4 5 6 7 8
| @Configuration @ComponentScan(basePackages = {"com.yuda"}, //包扫描 excludeFilters = { //排除EnableWebMvc扫描到的注解 @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) }) @ImportResource(value = {"classpath*:applicationContext.xml"}) public class RootConfig { }
|
还有很多配置,后面持续更新
总结
使用JavaConfig方式,代码的灵活性变的更高了,推荐使用,后续将持续更新本文档,总结自己感觉很有用的注解或者配置.