系列文章:spring的xml配置是如何對應註解配置的之掃描配置
阿新 • • 發佈:2020-07-31
<context:component-scan/>
掃描元件,可以被@ComponentScan代替
使用<context:component-scan/>後,就可以將<context:annotation-config/>移除
<context:annotation-config/>向Spring容器註冊AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor這4個BeanPostProcessor
<context:component-scan/>提供兩個子標籤:<context:include-filter>和<context:exclude-filter>各代表引入和排除的過濾。
<context:component-scan/>有一個use-default-filters屬性,該屬性預設為為true,意味著會掃描指定包下的全部的標有@Component的類,並註冊成bean,也就是@Component的子註解,如@Service,@Reposity,@Controller等
<context:component-scan base-package="tv.huan.weisp.web"> <!-- 加入下面這行希望只掃描@Controller,但實際不僅掃描包下面的@Controller,還會掃描的@Service --> <!-- 原因是指定的include-filter沒有起到作用,只要把use-default-filter設定成false就可以了,使用exclude-filter則不需要改此配置 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
@ServletComponentScan
Servlet、Filter、Listener 可以直接通過@WebServlet、@WebFilter、@WebListener註解自動註冊,無需其他程式碼,自定義的攔截器會被遮蔽
- 實現ServletContextListener介面,在contextInitialized方法中完成註冊,程式碼註冊通過ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean獲得控制。 也可以通過實現 ServletContextInitializer介面直接註冊。
- 在SpringBootApplication上使用@ServletComponentScan註解後,Servlet、Filter、Listener 可以直接通過 @WebServlet、@WebFilter、@WebListener註解自動註冊,無需其他程式碼。
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
servlet3.0 首先提供了@WebServlet,@WebFilter 等註解,這樣便有了拋棄web.xml的第一個途徑,憑藉註解宣告servlet和filter來做到這一點。 - 動態配置Servlet:在jar檔案中放入實現ServletContainerInitializer介面的初始化器