Spring原始碼學習(1)註解的使用

2021-10-20 19:10:11 字數 3313 閱讀 3168

資源不由使用的的雙方進行管理,而是不適用資源的第三方。

這樣做的的好處有:

該註解一般是在config類上面進行配置,如果不加路徑就是掃瞄所在類對應的包下的所有類,這個是用來掃瞄出配置了@config、@service等註解資訊的類。

高階用法:排除指定的註解。filtertype.annotation 是通過指定需要過濾的注釋;filtertype.custom是指定需要過濾的類。

@componentscan

(basepackages =

,includefilters =),

@componentscan

.filter

(type = filtertype.custom,value = test.

class)}

,usedefaultfilters =

false

)public

class

selfconfig

該註解用來指定bean的作用域物件。

@configuration

public

class

selfconfig

}

用於判斷加上這個註解的bean是否被注入。

下面**的意思就是說通過selfconditional 判斷容器中有沒有test這個bean,有就將user這個bean注入到容器中,沒有就不注入。

@configuration

public

class

selfconfig

@bean

@conditional

(value =

)public user user()

}public

class

selfconditional

implements

condition

return

false;}

}

將car這個物件注入ioc

public

class

selffactorybean

implements

factorybean

@override

public class<

?>

getobjecttype()

@override

public

boolean

issingleton()

}

方式一:

預設情況下bean是單例項建立的,在這個情況下容器啟動的時候,bean的物件就建立了,而且容器銷毀的時候,也會呼叫bean的銷毀方法

當指定為多例項時,容器啟動的時候,bean是不會被建立的而是在獲取bean的時候被建立,而且bean的銷毀不受ioc容器的管理.

public

class

myconfig

}public

class

mymain

}最終輸出

car初始化

com.example.spring_test.entity.car@15b204a1

car初始化**

*com.example.spring_test.entity.car@2ddc8ecb

方式二:

通過實現initializingbean介面來進行初始化;通過實現disposablebean介面來進行銷毀

@component

public

class

user

implements

initializingbean

, disposablebean

/** * disposablebean 的銷毀方法

* @throws exception

*/@override

public

void

afterpropertiesset()

throws exception

}@configuration

@componentscan

(basepackages =

)public

class

myconfig

public

class

mymain

} 輸出:

user初始化方法

com.example.spring_test.entity.user@44040454

user銷毀方法

方式三

通過實現beanpostprocessor介面,該介面會在每個bean被初始化之前和之後執行,而不是單單指某乙個bean

@component

public

class

user

implements

beanpostprocessor

@override

public object postprocessafterinitialization

(object bean, string beanname)

throws bean***ception

}

自動裝配首先時按照型別進行裝配,若在ioc容器中發現了多個相同型別的元件,那麼就按照屬性名稱來進行裝配

public

class

myconfig

@bean

public userservice userservice2()

@bean

public userservice userservice()

@autowired

public userservice userservice;

@autowired

public userservice userservice2;

}

@primary:在眾多相同的bean中,優先使用@primary註解的bean

spring 原始碼學習 1

1.spring 是乙個非侵入性 non invasive 框架,其目標是使應用程式 對框架的依賴最小化,應用 可以在沒有spring或者其它的容器下執行。2.spring提供了乙個一致的程式設計模型,使用應用直接使用pojo開發,從需可以與應用環境 如web伺服器 隔離開來。3.spring推動應...

Spring原始碼學習(1)

一 前言 該系列部落格用於記錄本人學習spring原始碼的過程,以spring5.1為例。第一篇筆記不會記錄太多 相關的內容,更多的是梳理一下spring整體的結構,本人學識有限,如果書寫過程中有什麼紕漏希望及時指出。二 spring簡介 spring是乙個開源框架,它由rod johnson建立。...

Spring 原始碼學習 day1

前言 最近也不知道該忙些什麼樣的事情。便隨便看看原始碼算了。正文 1 或git clone https 2 spring 原始碼是採用 gradle 來編譯的。至於 gradle 怎麼安裝,請參考 gradle 的安裝 開啟命令視窗,將當前目錄切換到原始碼所在目錄 像看那部分就到哪部分的目錄下 執行...