1. 程式人生 > >SpringMVC 原始碼深度解析(context:component-scan)(掃描和註冊的註解Bean)。

SpringMVC 原始碼深度解析(context:component-scan)(掃描和註冊的註解Bean)。

轉自:http://www.2cto.com/kf/201411/349920.html

我們在SpringMVC開發專案中,有的用註解和XML配置Bean,這兩種都各有自己的優勢,資料來源配置比較經常用XML配置,控制層依賴的service比較經常用註解等(在部署時比較不會改變的),我們經常比較常用的註解有@Component是通用標註,@Controller標註web控制器,@Service標註Servicec層的服務,@Respository標註DAO層的資料訪問。SpringMVC啟動時怎麼被自動掃描然後解析並註冊到Bean工廠中去(放到DefaultListableBeanFactory中的Map beanDefinitionMap中 以BeanName為key)?我們今天帶著這些問題來了解分析這實現的過程,我們在分析之前先了解一下這些註解。

@Controller標註web控制器,@Service標註Service層的服務,@Respository標註DAO層的資料訪問。@Component是通用標註,只是定義為一個類為Bean,SpringMVC會把所有新增@Component註解的類作為使用自動掃描注入配置路徑下的備選物件。@Controller、@Service\@Respository只是更加的細化,都是被@Component標註,所以我們比較不推薦使用@Component。原始碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { String value() default ""; } @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface
Controller { String value() default ""; } @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Repository { String value() default ""; }

都是有標示@Component

我們在配置檔案中,標示配置需要掃描哪些包下,也可以配置對某個包下不掃描,程式碼如下:

相關推薦

SpringMVC 原始碼深度解析(context:component-scan)掃描註冊註解Bean

轉自:http://www.2cto.com/kf/201411/349920.html 我們在SpringMVC開發專案中,有的用註解和XML配置Bean,這兩種都各有自己的優勢,資料來源配置比較經常用XML配置,控制層依賴的service比較經常用註解等(在

併發程式設計十二—— Java 執行緒池 實現原理與原始碼深度解析 之submit方法

在上一篇《併發程式設計(十一)—— Java 執行緒池 實現原理與原始碼深度解析(一)》中提到了執行緒池ThreadPoolExecutor的原理以及它的execute方法。這篇文章是接著上一篇文章寫的,如果你沒有閱讀上一篇文章,建議你去讀讀。本文解析ThreadPoolExecutor#submit。  

SpringMVC 原始碼深度解析BeanWrapper及其實現

一、 BeanWrapper BeanWrapper是對Bean的包裝,其介面中所定義的功能很簡單包括設定獲取被包裝的物件,獲取被包裝bean的屬性描述器,由於BeanWrapper介面是PropertyAccessor的子介面,因此其也可以設定以及訪問被包裝物件的屬性

SpringMVC原始碼深度解析之攔截器&過濾器&檢視層&非同步原始碼分析

SpringMVC註解方式開啟檢視層 整合Jsp 檢視層 @Bean public InternalResour

spring5 原始碼深度解析----- 事務增強器100%理解事務

上一篇文章我們講解了事務的Advisor是如何註冊進Spring容器的,也講解了Spring是如何將有配置事務的類配置上事務的,實際上也就是用了AOP那一套,也講解了Advisor,pointcut驗證流程,至此,事務的初始化工作都已經完成了,在之後的呼叫過程,如果代理類的方法被呼叫,都會呼叫BeanFact

曹工說Spring Boot原始碼12-- Spring解析xml檔案,到底從中得到了什麼context:component-scan完整解析

寫在前面的話 相關背景及資源: 曹工說Spring Boot原始碼(1)-- Bean Definition到底是什麼,附spring思維導圖分享 曹工說Spring Boot原始碼(2)-- Bean Definition到底是什麼,咱們對著介面,逐個方法講解 曹工說Spring Boot原始碼(3)--

曹工說Spring Boot原始碼11-- context:component-scan,你真的會用嗎這次來說說它的奇技淫巧

寫在前面的話 相關背景及資源: 曹工說Spring Boot原始碼(1)-- Bean Definition到底是什麼,附spring思維導圖分享 曹工說Spring Boot原始碼(2)-- Bean Definition到底是什麼,咱們對著介面,逐個方法講解 曹工說Spring Boot原始碼(3)--

spring原始碼深度解析筆記

之前提到在xmlBeanFactory建構函式中呼叫了XmlBeanDefinitionReader型別的reader屬性提供的方法this.reader.loadBeanDefinitions(resource),這就是載入整個資源載入的切入點。 當進入XmlBeanDe

spring原始碼深度解析筆記

DTD與XSD的區別 DTD(Document Type Definition)即文件型別定義,是一種XML約束模式語言,是XML檔案的驗證機制,是屬於XML檔案組成的一部分。DTD是一種保證XML文件格式正確的有效方法,可以通過比較XML文件和DTD檔案來看

SpringMVC配置檔案詳解:<context:annotation-config/><context:component-scan base-package=""/><mvc:annotation-driven /> Spring配置檔

原文地址:https://www.cnblogs.com/lcngu/p/5080702.html Spring配置檔案詳解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:

Spring原始碼深度解析總結3—— 配置檔案的讀取Bean的載入

上一篇總結了Spring利用Resource介面對配置檔案的封裝,接下來我們要看看Spring對封裝好的資源是如何解析的,以及如何利用解析出的資訊載入Bean的。BeanFactory bf = new XmlBeanFactory(new ClassPathResoure(

Spring原始碼深度解析容器的基礎XmlBeanFactory

現在我們已經對Srping的容器有了一個大概的瞭解,儘管很多地方還很迷糊,但是不要緊,下面我們開始探討每個步驟的詳細實現。接下來我們要深入分析以下程式碼的實現: BeanFactory bf = new XmlBeanFactory(new ClassPathResourc

mysql核心原始碼深度解析 緩衝池 buffer pool 整體概述bufferpool部分一

老劉原創文章,CSDN首發!轉載請註明出處。 mysql的記憶體管理龐大而先進,這在mem0pool.c檔案的開頭註釋中都有說明,粗略的可以分成四部分,包含9大塊: buffer pool, parsed andoptimized SQL statements, dat

併發程式設計十一—— Java 執行緒池 實現原理與原始碼深度解析

史上最清晰的執行緒池原始碼分析 鼎鼎大名的執行緒池。不需要多說!!!!! 這篇部落格深入分析 Java 中執行緒池的實現。 總覽 下圖是 java 執行緒池幾個相關類的繼承結構:    先簡單說說這個繼承結構,Executor 位於最頂層,也是最簡單的,就一個 execute(

Spring原始碼深度解析Spring的整體架構

spring框架是一個分層架構,它包含一系列的功能要素,被分為大約20個模組,如下圖所示:                                        spring整體架構圖 這些模組被總結為以下幾個部分: (1)Core Container Core

Intellij IDEA配置springMVC時提示"context:component-scan" is not bound

xxx-servlet.xml配置 <context:component-scan base-package="包名" /> 時,報錯:The prefix "context" for e

Spring原始碼深度解析總結6—— 配置檔案的讀取Bean的載入

經過前面的分析,我們終於結束了對XML配置檔案的解析,接下來將會面對更大的挑戰,就是對bean載入的探索。bean載入的功能的實現遠比bean的解析複雜的多,同樣,我們還是以最簡單的示例為基礎,對於bean的功能,在Spring中的呼叫方式為:MyTestBean bean

Spring原始碼深度解析總結1——XmlBeanFactory的結構組成

最近在讀《Spring原始碼深度分析》這本書,雖然講的是Spring3.0版本的東西,但是基本的思想還是相同的。所以我打算一邊讀一邊做一些總結,一方面在看過一邊之後再捋一遍整體的過程,另一方面也防止日後忘記某些東西無處可查。 在開始原始碼閱讀之前,我們首先要了解一下Spri

Spring原始碼深度解析XmlBeanFactory原始碼解析

前言:     Spring容器有多種實現方式,一般來說可分為:BeanFactory和ApplicationContext     * BeanFactory提供了容器的基本功能,如getBean()等功能     * ApplicationContext介面繼承

spring原始碼深度解析---預設標籤解析

spring原始碼深度解析—預設標籤解析(下) 在spring原始碼深度解析—預設標籤解析(上)中我們已經完成了從xml配置檔案到BeanDefinition的轉換,轉換後的例項是GenericBeanDefinition的例項。而GenericBeanDef