本文觸發點:讀spring揭秘
説人話,ioc幹了啥?通過反射幫你自動地把組合(依賴)的對象賦值(setter).lombok是幫你寫getter/setter/constructor/builder,ioc就類似的,幫你把 你定義的service,set到依賴它的地方.
為什麼這麼搞?設計原則裏的一條規則:單一職責原則.每個類都有自己的單一的職責,這裏就感覺説的很清楚但有很費解,因為缺了界限,多大的職責算單一職責,那一個大的單一職責,需要做許多事情,每件事又是一個單一職責?這個角度理解就很難了. 我的理解是,這得從面向對象説起.
面向對象其實就是代碼的整理, 面向方法就是一路走到頭,為什麼面向對象勝了面向方法?可讀性,可維護性都更方便, 你可以想想一下, 如果看過一些spring源碼的教程,就知道spring如果不把代碼拆分到不同的類,都擠在一個方法裏,那得多難理得清,找花括號的起止位置就及其複雜.面向對象和單一職責的本質是一樣的, 就是代碼分類管理(找得容易,改得容易,理解得容易),一個方法的功能儘量小,職責儘量小, 然後供複雜需求的接口來選擇性調用.正因為 代碼分類管理,分類放到不同的java類裏,所以就一定會有 組合(依賴),有了依賴,就一定有設置依賴的對象,就有了setter, 而setter是可以自動化的(lombok就是一個例子),java有反射,setter也就有了方法論.
此時再看單一職責,就是任意大小的職責都行,單一職責分類管理代碼,然後呢?複用.也可以不考慮複用,僅僅是為了修改方便,閲讀方便來.
繼續ioc:setter幹了啥, 把聲明的bean,set到組合對象裏去.直接想,感覺很簡單,考慮複雜的場景,FactoryBean,就稍微複雜了些