Spring核心功能的簡單實現(IOC|DI)

講一下自己實現簡單[IOC|DI]功能的過程

首先,IOC意味着容器管理類的實例。實現的時候需要能從配置文件讀取需要掃包的路徑,然後掃包 獲取包下所有的類。

因爲掃包只是方法,所以不用糾結,如果以前沒做過從網上找一個就行。

拿到要掃描的包下所有類後就可以創建類的實例,然後使用類的全路徑名作爲Key,將類的實例作爲Value放到一個Map中

這塊內容有兩個需要注意的點:

[1]這裏選擇用動態代理作爲類的實例(這是AOP的基礎),默認使用JAVA原生,如果不能使用JAVA原生就使用CgLib(這裏的知識就不寫了)

[2]注意類和接口的實現關係,接口的實例存儲爲實現類的實例

上面完成後就可以看做是IOC了

下面是DI的內容

重新循環掃包獲取的類的列表

從容器中拿到類的實例,使用反射查看類中所有變量,遍歷變量查看是否有自定義的自動注入註解。有的話獲取變量所屬的類 然後從IOC容器中拿實例賦值給變量(不需要考慮循環引用的問題,因爲實例其實是地址傳遞)
以上就是簡單的IOC和DI的實現了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章