控制反转IoC和依赖注入DI

发布时间 2023-07-14 01:32:09作者: 时间羚羊

IoC控制反转,指spring有一个容器,帮助我们管理bean的生命周期,不需要显示的进行new和编写控制这个bean状态的代码,效果就是很好地解耦了一些业务逻辑上的关联性。

DI依赖注入,其实和控制反转描述的是同一件事,只是从另一个角度上的描述,spring帮助我们管理bean之后,我们就可以在任何地方轻易的注入或者取消注入我们想要用到的对象。

 

总结,实际上这种容器化的思想在web这种规范的编程有巨大的优化效果,因为web端对于过滤器、servlet和切面编程,这些固有的编程方式有巨大的依赖,这些容器最复杂的点其实就是管理生命周期的同时还需要做到解耦,整理依赖关系,这是很困难的,这也是IoC真正的优势所在。

像创建一些简单且普通的无状态bean,即使没有spring,我们其实管理起来也未必复杂。

 

至于创建的bean线程是否安全这种问题,这其实是一种编写时尽量需要遵循的规范,我们要尽量创建无状态bean,类似controller、service、mapper这些只包含方法,不包含私有属性的就是无状态bean,即使多线程访问,每个线程都维护自己的私有栈来调用方法,就没有线程安不安全这种问题。

如果一定要创建有状态bean,可以先选用juc,其次选用ThreadLocal,最后选用我们自己编写的线程安全类。