本文將這樣展開: 1. 簡(jiǎn)單講解Spring中的<context:component-scan /> <context:annotation-config /> <mvc:annotation-driven /> 這三者的作用 2. 講解下我們經(jīng)??吹降脑趙eb.xml文件中定義的ContextLoaderListener和DispatcherServlet的區(qū)別 <context:annotation-config /> 這個(gè)標(biāo)簽告訴Spring到bean類中尋找一些annotation定義的類, 這些annotation基本如下: @Autowired @PostConstruct @PreDestroy @Resource 等。 需要注意的是。這個(gè)標(biāo)簽并沒有激活@Transactional 和 @TransactionAttribute <context:component-scan base-package=""/> 這個(gè)標(biāo)簽用于告訴Spring搜索我們指定的包下面以及一些需要被自動(dòng)注入的bean。 默認(rèn)支持的annotation:@Component @Repository @Service @Controller 需要注意的是:這個(gè)標(biāo)簽頁(yè)實(shí)現(xiàn)了和annotation-config同樣的效果。 <mvc:annotation-driven /> 剛開始的時(shí)候我也很困惑為什么需要配置這個(gè)標(biāo)簽,但是當(dāng)我們?cè)谂渲肧pringMVC的控制器的時(shí)候,我們發(fā)現(xiàn)有RequestMapping的存在,這個(gè)標(biāo)簽的作用之一就是告訴Spring去檢測(cè)RequestMapping。其他的作用如下: - 激活@ExceptionHandler這個(gè)annotation - 配置了這個(gè)標(biāo)簽還可以將RequestMappingHandlerAdapter注冊(cè)到Spring中 - 是SpringMVC提供默認(rèn)的類型轉(zhuǎn)化,因?yàn)槲覀儧]有在<mvc:annotation-driven/> 的屬性中配置ConversionService - 當(dāng)然,這個(gè)標(biāo)簽還起到了一些其他的作用,我不怎么會(huì)翻譯,怕變味。下面是英文原文: It also enables the following: 1. Spring 3 style type conversion through a ConversionService instance in addition to the JavaBean PropertyEditors used for Data Binding. 2. Support for formatting Number fields using the @NumberFormat annotation through the ConversionService 3. Support for formatting Data,Calendar,Long and Joda Time fields using the @DateTimeFormat annotation, if Joda Time 1.3 or higher is present on the classpath. 4. Support for validating @Controller inputs with @Valid if a JSR-303 Provider is present on the classpath. 5. HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values form @RequestMapping or @ExceptionHandler methods. 2. 下面是講解web.xml配置是ContextLoaderListener和DispatcherServlet的區(qū)別: - ContextLoaderListener是在我們的web容器啟動(dòng)的時(shí)候啟動(dòng)的,默認(rèn)會(huì)加載/WEB-INF/下面的applicationContext.xml文件。并創(chuàng)建一個(gè)WebApplicationContext容器。 - DispatcherServlet是在我們第一次訪問我們的應(yīng)用的時(shí)候創(chuàng)建的。這時(shí)候它默認(rèn)會(huì)將配置在/WEB-INF下面的<servlet-name>-servlet.xml配置文件,然后也創(chuàng)建一個(gè)WebApplicationContext。這個(gè)WebApplicationContext將之前ContextLoaderListener創(chuàng)建的容器作為父容器,因此在父容器中配置的所有Bean都能夠被注入到子容器中。 |
|