一、springIOC
1.什么是springIOC控制反转或者依赖注入DI ???
(spring两大机制之一,还有SpringAOP面向切面编程)
引申:传统模式下 一个 java对象调用另一个java对象的方式是什么? new 关键字
含义:在使用了spring框架之后,对象的实例不再由调用者来创建,而是由spring容器来创建,spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制,这样,控制权由应用程序代码转移到了spring容器,控制权发生了反转。(为什么要把这种方式叫做控制反转呢?)。
通过程序理解
分析程序,这里DemoController和DemoServiceImpl之间就有依赖关系。如果我们没有用spring去管理控制对象,那么我的程序就是这样写的
但是采用了springboot之后 我们可以看到 DemoController上面有注解**@RestController** 其下级有**@Controller注解 再下一级有@Component**注解
同时可以看到DemoServiceImpl类上面有**@Service** 其下一级也是**@Component**注解
spring程序会自动扫描类上面是否有@Component注解 如果有 就会创建这个类的实例 并将该实例保存到spring bean容器中。— 对象由spring来创建不是由调用者创建
DemoController 需要依赖 DemoServiceImpl 对象 并调用该对象的sayHello方法。现在这二个对象都被spring容器持有了。所以spring容器可以将DemoServiceImpl 的实例注入到 DemoController 实体对象中 而注入的方式有上图的三种模式。— 依赖注入DI
3.依赖注入三种方式
构造器方式、setter方法、注解方式
4.IoC的原理
控制反转是Spring框架的核心。其原理是基于面向对象(OO)设计原则的The Hollywood Principle:Don’t call us, we’ll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的,所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,即在一个类中调用另外一个类。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,即所谓反转。
5.IOC优势
(1).可维护性比较好,非常便于进行单元测试,便于调试程序和诊断故障。代码中的每一个Class都可以单独测试,彼此之间互不影响,只要保证自身的功能无误即可,这就是组件之间低耦合或者无耦合带来的好处。
(2).每个开发团队的成员都只需要关注自己要实现的业务逻辑,完全不用去关心其他人的工作进展,因为你的任务跟别人没有任何关系,你的任务可以单独测试,你的任务也不用依赖于别人的组件,再也不用扯不清责任了。所以,在一个大中型项目中,团队成员分工明确、责任明晰,很容易将一个大的任务划分为细小的任务,开发效率和产品质量必将得到大幅度的提高。
(3).可复用性好,我们可以把具有普遍性的常用组件独立出来,反复应用到项目中的其它部分,或者是其它项目,当然这也是面向对象的基本特征。显然,IoC更好地贯彻了这个原则,提高了模块的可复用性。符合接口标准的实现,都可以插接到支持此标准的模块中。
(4).IoC生成对象的方式转为外置方式,也就是把对象生成放在配置文件里进行定义,这样,当我们更换一个实现子类将会变得很简单,只要修改配置文件就可以了,完全具有热插拨的特性。