在spring mvc当中经常可以看到@ComponentScan这个注解,
那么怎么样去理解它呢?
1.配置视图控制器
- package com.apress.prospringmvc.bookstore.web.config;
- import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
- @Configuration
- @EnableWebMvc
- @ComponentScan(basePackages = { “com.apress.prospringmvc.bookstore.web” })
- public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
- @Override
- public void addViewControllers(final ViewControllerRegistry registry) {
- registry.addViewController(”/index.htm”).setViewName(“index”);
- }
- }
2.基于注解的Controller
- package com.apress.prospringmvc.bookstore.web;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- @Controller
- public class IndexController {
- @RequestMapping(value = “/index.htm”)
- public ModelAndView indexPage() {
- return new ModelAndView(“index”);
- }
- }
那么对于配置的视图控制器加了
@Configuration 和@ComponentScan注解背后会做什么呢?
其实很简单,@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
类上的注解@Configuration 是最新的用注解配置spring,也就是说这是个配置文件,和原来xml配置是等效的,只不过现在用Java代码进行配置了 加上一个@Configuration注解就行了,是不是很方便,不需要那么繁琐的xml配置了,这样基于注解的配置,可读性也大大增高了。