Spring 註解 Autowired原理

2021-09-11 07:58:32 字數 2758 閱讀 6472

// 在啟動spring ioc時,容器會自動裝載autowiredannotationbeanpostprocessor後置處理器

public class autowiredannotationbeanpostprocessor extends instantiationawarebeanpostprocessoradapter

implements mergedbeandefinitionpostprocessor, priorityordered, beanfactoryaware

可以提供beanfactory到當前bean例項(autowiredannotationbeanpostprocessor例項)

當前bean例項從而可以獲取到 beanfactory 裡面所有的 bean。

public inte***ce beanfactoryaware extends aware  or a custom init-method.

* @param beanfactory owning beanfactory (never ). 擁有的beanfactory

* the bean can immediately call methods on the factory.

* @throws bean***ception in case of initialization errors

* @see beaninitializationexception

*/void setbeanfactory(beanfactory beanfactory) throws bean***ception;

}

為指定的bean後置處理其合併後的bean定義,修改其bena定義

public inte***ce mergedbeandefinitionpostprocessor extends beanpostprocessor
order值相同時,實現priorityordered介面比實現ordered介面具有更高優先順序

注:實現相同介面時,值越低優先順序越高

public inte***ce priorityordered extends ordered
public abstract class instantiationawarebeanpostprocessoradapter implements smartinstantiationawarebeanpostprocessor 

// 應該是獲取bean的所有構造器

@override

public constructor<?> determinecandidateconstructors(class<?> beanclass, string beanname) throws bean***ception

// 獲取bean的先前引用

@override

public object getearlybeanreference(object bean, string beanname) throws bean***ception

// 例項化之前後置處理

@override

public object postprocessbeforeinstantiation(class<?> beanclass, string beanname) throws bean***ception

// 例項化之後後置處理

@override

public boolean postprocessafterinstantiation(object bean, string beanname) throws bean***ception

// 後置處理屬性值

@override

public propertyvalues postprocesspropertyvalues(

propertyvalues pvs, propertydescriptor pds, object bean, string beanname) throws bean***ception

// 例項化之前後置處理

@override

public object postprocessbeforeinitialization(object bean, string beanname) throws bean***ception

// 例項化之後後置處理

@override

public object postprocessafterinitialization(object bean, string beanname) throws bean***ception

}

@autowired 的使用簡化了我們的開發,其原理是使用 autowiredannotationbeanpostprocessor 類來實現,該類實現了 spring 框架的一些擴充套件介面,通過實現 beanfactoryaware 介面使其內部持有了 beanfactory(可輕鬆的獲取需要依賴的的 bean);通過實現 mergedbeandefinitionpostprocessor 擴充套件介面,在 beanfactory 裡面的每個 bean 例項化前獲取到每個 bean 裡面的 @autowired 資訊並快取下來;通過實現 spring 框架的 postprocesspropertyvalues 擴充套件介面在 beanfactory 裡面的每個 bean 例項後從快取取出對應的註解資訊,獲取依賴物件,並通過反射設定到 bean 屬性裡面

參考:spring 中常用註解原理剖析    

Spring註解 Import註解

常用的匯入註解分類 註冊自己寫的類service dao controller可用包掃瞄 元件標註註解 controller service repository component bean 匯入的第三方包裡面的元件 import 快速給容器中匯入乙個元件 1 import 要匯入到容器中的元件 ...

Spring Bean裝配之Autowired註解

autowired public void setinjectiondao injectiondao injectiondao autowired required false public void setinjectiondao injectiondao injectiondao 預設情況下,如...

spring註解之 Scope註解

1,scope註解是什麼 scope註解是springioc容器中的乙個作用域,在 spring ioc 容器中具有以下幾種作用域 基本作用域singleton 單例 prototype 多例 web 作用域 reqeust session globalsession 自定義作用域 a.single...