本文触发点:读spring揭秘
说人话,ioc干了啥?通过反射帮你自动地把组合(依赖)的对象赋值(setter).lombok是帮你写getter/setter/constructor/builder,ioc就类似的,帮你把 你定义的service,set到依赖它的地方.
为什么这么搞?设计原则里的一条规则:单一职责原则.每个类都有自己的单一的职责,这里就感觉说的很清楚但有很费解,因为缺了界限,多大的职责算单一职责,那一个大的单一职责,需要做许多事情,每件事又是一个单一职责?这个角度理解就很难了. 我的理解是,这得从面向对象说起.
面向对象其实就是代码的整理, 面向方法就是一路走到头,为什么面向对象胜了面向方法?可读性,可维护性都更方便, 你可以想想一下, 如果看过一些spring源码的教程,就知道spring如果不把代码拆分到不同的类,都挤在一个方法里,那得多难理得清,找花括号的起止位置就及其复杂.面向对象和单一职责的本质是一样的, 就是代码分类管理(找得容易,改得容易,理解得容易),一个方法的功能尽量小,职责尽量小, 然后供复杂需求的接口来选择性调用.正因为 代码分类管理,分类放到不同的java类里,所以就一定会有 组合(依赖),有了依赖,就一定有设置依赖的对象,就有了setter, 而setter是可以自动化的(lombok就是一个例子),java有反射,setter也就有了方法论.
此时再看单一职责,就是任意大小的职责都行,单一职责分类管理代码,然后呢?复用.也可以不考虑复用,仅仅是为了修改方便,阅读方便来.
继续ioc:setter干了啥, 把声明的bean,set到组合对象里去.直接想,感觉很简单,考虑复杂的场景,FactoryBean,就稍微复杂了些
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。