最近工作中,要在項(xiàng)目里配置sftp的連接池,然后遇到了一些問(wèn)題,在解決問(wèn)題的過(guò)程中,對(duì)spring bean的生命周期的有了進(jìn)一步的實(shí)證和理解??聪逻@段代碼:

image.png
這個(gè)類是一個(gè)加了@Configuration的配置類,作為一個(gè)component,spring容器會(huì)在啟動(dòng)的時(shí)候加載并且對(duì)這個(gè)類進(jìn)行實(shí)例化->屬性賦值->初始化。
首先進(jìn)行實(shí)例化,我們看到斷點(diǎn)走到了這個(gè)類的構(gòu)造方法中。然而對(duì)于maxTotal這個(gè)成員變量,我們通過(guò)@Value注解,把100注值給了它,但構(gòu)造方法中卻沒(méi)有拿到這個(gè)值,依然為0。
那么原因就是spring容器最先做的是對(duì)這個(gè)類進(jìn)行實(shí)例化,這個(gè)時(shí)候?qū)傩再x值還沒(méi)有開(kāi)始,所以我們通過(guò)@Value,@Autowired注入的屬性值都是得不到的。
解決方法
再看下面這段代碼

image.png
當(dāng)我們把這些屬性值作為構(gòu)造器參數(shù)時(shí),spring容器就會(huì)在類實(shí)例化時(shí),優(yōu)先獲取這些值。
理論來(lái)自實(shí)踐,并高于實(shí)踐。如有不足,請(qǐng)批評(píng)指正。