定位Bean 掃瞄路徑

2021-10-10 14:01:41 字數 2152 閱讀 5738

//儲存乙個讀取註解的bean定義讀取器,並將其設定到容器中

private final annotatedbeandefinitionreader reader;

//儲存乙個掃瞄指定類路徑中註解bean定義的掃瞄器,並將其設定到容器中

private final classpathbeandefinitionscanner scanner;

//預設建構函式,初始化乙個空容器,容器不包含任何 bean 資訊,需要在稍後通過呼叫其register()

//方法註冊配置類,並呼叫refresh()方法重新整理容器,觸發容器對註解bean的載入、解析和註冊過程

this.reader = new annotatedbeandefinitionreader(this);

this.scanner = new classpathbeandefinitionscanner(this);

} super(beanfactory);

this.reader = new annotatedbeandefinitionreader(this);

this.scanner = new classpathbeandefinitionscanner(this);

} //最常用的建構函式,通過將涉及到的配置類傳遞給該建構函式,以實現將相應配置類中的bean自動註冊到容器中

this();

register(annotatedclasses);

refresh();

} //該建構函式會自動掃瞄以給定的包及其子包下的所有類,並自動識別所有的spring bean,將其註冊到容器中

this();

scan(basepackages);

refresh();

} @override

public void setenvironment(configurableenvironment environment)

//為容器的註解bean讀取器和註解bean掃瞄器設定bean名稱產生器

public void setbeannamegenerator(beannamegenerator beannamegenerator)

//為容器的註解bean讀取器和註解bean掃瞄器設定作用範圍元資訊解析器

public void setscopemetadataresolver(scopemetadataresolver scopemetadataresolver)

//為容器註冊乙個要被處理的註解bean,新註冊的bean,必須手動呼叫容器的

//refresh()方法重新整理容器,觸發容器對新註冊的bean的處理

public void register(class<?>... annotatedclasses)

//掃瞄指定包路徑及其子包下的註解類,為了使新新增的類被處理,必須手動呼叫

//refresh()方法重新整理容器

public void scan(string... basepackages)

public void registerbean(classannotatedclass, object... constructorarguments)

public void registerbean(@nullable string beanname, classannotatedclass, object... constructorarguments)

});} @override

public void registerbean(@nullable string beanname, classbeanclass, @nullable suppliersupplier,

beandefinitioncustomizer... customizers) }

通過上面的原始碼分析,我們可以看啊到spring 對註解的處理分為兩種方式:

1)、直接將註解bean 註冊到容器中

可以在初始化容器時註冊;也可以在容器建立之後手動呼叫註冊方法向容器註冊,然後通過手動重新整理容器,使得容器對註冊的註解bean 進行處理。

2)、通過掃瞄指定的包及其子包下的所有類

在初始化註解容器時指定要自動掃瞄的路徑,如果容器建立以後向給定路徑動態新增了註解bean,則需要手動呼叫容器掃瞄的方法,然後手動重新整理容器,使得容器對所註冊的bean 進行處理。

接下來,將會對兩種處理方式詳細分析其實現過程。

spring 註解掃瞄bean配置

spring公共配置 spring 會自動掃瞄com.zghw下的spring註解 常用註解 定義bean的註解 controller controller bean的名稱 定義控制層bean,如action service service bean的名稱 定義業務層bean repository ...

jar包的bean掃瞄

jar包的bean是不會自動被掃瞄的,要自己掃瞄 1.搞個配置類 componentscan裡面寫要掃瞄的包,注意是可以掃秒子包裡的 componentscan component public class enableconfig 2.配個註解,impor進配置類的class target ret...

Spring 中的Bean 自動掃瞄

將spring 配置成如下這樣.就表示 spring 將掃瞄所有的com.yourhz下面的bean.那麼bean應當如何寫才能被他掃瞄到呢。我們看如下乙個例子。在類名上面加如下一句,則表示這是乙個受制於spring 的 bean controller 如果寫成這樣的,估計表示bean的控制代碼名稱...