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

最近刚看了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就搭建起来了












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love13135816

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值