spring - InternalResourceViewResolver code-base configuration
Framework & Platform/Spring 2012. 11. 21. 18:37@Configuration을 사용한 웹 설정 파일 테스트 작성시 난감함…
package cantabille.config;
import cantabille.modules.ModulesPackageMarker;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Controller;import org.springframework.web.servlet.HandlerMapping;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;
/** * @author Keesun Baik */@Configuration@ComponentScan( basePackageClasses = ModulesPackageMarker.class, useDefaultFilters = false, includeFilters = @ComponentScan.Filter(Controller.class))public class WebConfig extends WebMvcConfigurationSupport {
@Override protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/static"); }
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setViewClass(JstlView.class); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }
}
이렇게 코딩을 해두고.. 이 설정 파일에서 빈으로 등록되는 것들이 제대로 등록되나 궁금하니까 테스트를 작성해볼 수 있겠죠.
package cantabille.config;
import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
/** * @author Keesun Baik */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = WebConfig.class)public class WebConfigTest {
@Autowired RequestMappingHandlerMapping rmhm;
@Test public void di(){
}
}
이런식으로 말이죠. di() 메서드 아무것도 안해도 사실상 제가 원하는 테스트는 저정도면 충분하거든요. 그리고 이정도 테스트는 XML 기반으로 설정할 때도 잘 통과했었는데…. 흠.. 잘 안됩니다. ApplicationContext를 제대로 만들지 못합니다. 특정 빈을 만들지 못하기 때문이죠. DefaultServlet을 사용하려면 ServletContext가 필요하다는 에러가 나면서 Assert.notNull()에서 걸리고 말죠… 어찌하면 좋을까나…
스프링 TestContext를 포기할 수밖에 없는건가…
그리고 그게 꼭 필요한거면 XML 기반으로 동일한 설정을 할때도 안됐어여 하는거 아닌가..
흠.. 고민이로세.
아.. 그냥 테스트하지 말까.. 너무 당연한거니깐?? ㅋㅋㅋ
출처 - http://whiteship.me/?p=13555
위 설정에서 resolver.setViewClass(JstlView.class); 를 설정하지 않으면 다음과 같은 로그 발생
11월 21, 2012 6:31:09 오후 org.apache.jasper.compiler.TldLocationsCache tldScanJar
정보: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
'Framework & Platform > Spring' 카테고리의 다른 글
spring - @ComponentScan excludeFilters (0) | 2012.12.10 |
---|---|
spring - css, js 파일 처리 (0) | 2012.12.08 |
spring - At least one base package must be specified (0) | 2012.11.21 |
spring - 외부 Property 값 주입 (0) | 2012.11.18 |
spring - TaskExecutor (0) | 2012.11.16 |