java创建子类对象的步骤_一通Spring骚操作:我敢说没人比我更懂Java对象创建
一、開篇一問
一個Spring Bean是Java對象嗎?那么一個對象是Spring Bean嗎?
帶著這個問題我們一起來回顧Spring的生命周期流程,徹底了解一個類在Spring中究竟做了哪些操作!
我們先看一段代碼!
誠然,相信只要是使用過Spring的人都應(yīng)該知道,從Spring容器中獲取的對象,里面的EmailServiceImpl是被Spring自動注入了的!
但是相同的點(diǎn)是,他們兩個都是一個Java對象,都是加載在JVM里面的,那么至少我們現(xiàn)在可以回答的問題了:
SpringBean一定是一個java對象;但是一個Java對象卻不一定是一個SpringBean!
那么我們是不是可以這樣認(rèn)為,只有被Spring管理的類,才能夠稱之為一個Bean,其他的都稱之為對象!那么Spring是如何將一個類從一個普通的類轉(zhuǎn)換為一個Spring Bean的呢?他究竟是經(jīng)過了哪些步驟呢?我們一起探究一下!
二、Spring生命周期的大膽猜測
這里分享一個閱讀源碼的小技巧:捉大放小,連蒙帶猜!8字真言,我們在閱讀源碼過程中,因?yàn)槟阋?#xff0c;每一個被開源出來的優(yōu)秀框架,其源碼的體系都是極其龐大復(fù)雜的,我們不能面面俱到,所以在看源碼過程中一定不能被細(xì)枝末節(jié)纏住,一定要先理清楚整個框架的一個大致思想和大致的框架體系,再去搞那些細(xì)枝末節(jié),其效率會好很多,其次在看源碼過程中,我們一定要大膽的去想,去猜測,如果這個功能讓你自己去寫,你會怎么實(shí)現(xiàn)!
我們今天學(xué)習(xí)SpringBean的生命周期也是按照這個8字真言去學(xué)習(xí),通過我們之前所學(xué),Spring大致有以下的功能:
我們從平常的使用中,至少可以得知以上的三點(diǎn),如果讓你自己去實(shí)現(xiàn),必會如何實(shí)現(xiàn)呢?
- 首先他既然能夠幫我們自己創(chuàng)建對象,那么他肯定是通過反射來創(chuàng)建的,通過反射來創(chuàng)建,就必定繞不過去要使用Class對象創(chuàng)建,那么我們?nèi)绾潍@取Class對象呢? 去掃描項(xiàng)目,將指定的包下的加了注解的類文件切割獲取Class名稱,通過反射加載Class名稱,反射創(chuàng)建java對象!
- 我們要完成屬性的填充,為了方便和性能方面,我肯定會把這些創(chuàng)建好的對象保存起來,無疑Map容器是最合適的!
- 我們在創(chuàng)建一個對象完成之后,反射拿到里面的屬性,如果需要填充,我們先去我們之前保存的容器里面去取,取不出來在反射吧這個依賴的屬性創(chuàng)建出來,然后填充進(jìn)對象再保存在容器里面,從而完成了屬性的注入!
- 填充完成屬性之后,我們那當(dāng)前對象,取與Aop邏輯進(jìn)行對比,判斷是否需要代理,不需要則創(chuàng)建完成,保存進(jìn)Map容器,需要代理則對當(dāng)前這個類進(jìn)行jdk或者cglib的代理然后再保存進(jìn)容器里面!
于是乎,我們自己實(shí)現(xiàn)了一個Spring管理一個Bean的所有過程,畫個圖,他大概長這樣!
自己實(shí)現(xiàn)看起來,整個流程就很清晰,掃描、創(chuàng)建、注入、代理、保存一應(yīng)俱全,但是Spring的實(shí)現(xiàn)方式遠(yuǎn)比我們自己實(shí)現(xiàn)的要復(fù)雜的多得多!
三、Spring的生命周期流程
Spring作者希望,Spring再著手管理一個Bean的時候,它希望能夠讓Spring的使用者能夠插手,Spring把一個類對象變成一個Java Object的每一步,怎么理解呢?
比如我們買了一棟新房子,這個房子需要取裝修,你自己去裝修誠然不夠?qū)I(yè),不能夠面面俱到,所以是我們就找了一個裝修公司幫助我們裝修新房,于是裝修公司就開始預(yù)先畫好的圖紙進(jìn)行裝修,但是在裝修的過程中,你為了讓自己的新家更加溫馨,你想掛一些壁畫在墻上,但是圖紙上卻沒有!于是你就找裝修公司,要求裝修公司在新家的墻上掛上一些壁畫!裝修公司在接受到你的請求之后,就吩咐裝修的工人在圖紙之外去給你在墻上掛上壁畫之后,然后再接著裝修!
上面這個小故事有 這樣幾個角色,我們把它和Spring對照起來!
- 你:代表框架的使用者!
- 新房:代表一個Class文件,你自己也能夠裝修,但是不夠?qū)I(yè),所以交給裝修公司! 那么你自己創(chuàng)建對象可能某些使用用起來很麻煩,所以我們交給了Spring容器!
- 裝修公司:代表著Spring容器!
- 圖紙:代表預(yù)設(shè)步驟,Spring原本就存在的步驟!
- 工人:Spring提供的各種接口!我們可以通過Spring工廠提供的接口做各種自定義的配置!
上面的小故事,大致可以描述Spring生命周期的核心思想!Spring再對一個Class文件實(shí)例化成具體的Spring Bean的時候,它提供了各種接口,由我們自己實(shí)現(xiàn)!然后再實(shí)例化過程中,不同的時機(jī),去調(diào)用不同的接口!從而完成Spring的整個生命周期的創(chuàng)建!
Spring的生命周期大致分為以下部分!
整體的方法流程示例圖如下:
四、對應(yīng)源碼結(jié)構(gòu)圖
最后
大家看完有什么不懂的可以在下方留言討論.
謝謝你的觀看。
覺得文章對你有幫助的話記得關(guān)注我點(diǎn)個贊支持一下!
作者:螺旋升天
鏈接:https://juejin.im/post/6875847345121001486
總結(jié)
以上是生活随笔為你收集整理的java创建子类对象的步骤_一通Spring骚操作:我敢说没人比我更懂Java对象创建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Oracle函数大全2
- 下一篇: 轴固定位置_轴承的装配与内外圈固定方法,
