In last few posts about Sring, I have used XML based configuration. But offlate I have figured out that it is easier to use Java based configuration. Here is how it is done for a simple spring mvc application
1. Firstly you will tell web.xml that you will use which class for configuring spring
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <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>com.myapp.config.MyConfig</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping>
2. You will mark your class with annotation @Configuration
3. For MVC application @EnableWebMvc
4. For component scan- to tell your spring application where to find compoenent @ComponentScan(basePackages = “com.app.my com.app.service com.app.aspect”)
5. If you are using AOP @EnableAspectJAutoProxy
So a sample file would look like
@Configuration
@EnableAspectJAutoProxy
@EnableWebMvc
@ComponentScan(basePackages = "com.app.my com.app.service com.app.aspect")
public class MyConfig extends WebMvcConfigurerAdapter {
@Bean
public UrlBasedViewResolver urlBasedViewResolver() {
UrlBasedViewResolver res = new InternalResourceViewResolver();
res.setViewClass(JstlView.class);
res.setPrefix("/WEB-INF/");
res.setSuffix(".jsp");
return res;
}
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/fonts/**")
.addResourceLocations("/fonts/").setCachePeriod(31556926);
registry.addResourceHandler("/css/**").addResourceLocations("/css/")
.setCachePeriod(31556926);
registry.addResourceHandler("/images/**")
.addResourceLocations("/images/").setCachePeriod(31556926);
registry.addResourceHandler("/js/**").addResourceLocations("/js/")
.setCachePeriod(31556926);
}
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver mr = new CommonsMultipartResolver();
mr.setMaxUploadSize(50000000);
return mr;
}
}
