用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就搭建起來了












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章