学习spring框架必须要知道ioc di aop这三个概念,接下来会简单讲解下。
一、ioc(控制反转)
以前我们需要什么类都要自己创建自己new但是如果我们一旦交给spring投入管理以后呢,spring就会自动帮我们创建,交给程序使用不再需要自己大量的new,这就是大白话的解释。
关于控制,谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取。
关于反转,有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
如何实现ioc呢?
1、属性注入,或叫做set方法注入
2、构造方法注入
3、 注解注入
二、di(依赖注入)
di说白了就是实现ioc的一种方式。
一个稍微大一点的应用程序,它都是由若干个对象组成的,这些对象如果各干各的谁也不理谁,那工作怎么可能完成呢!所以这些对象肯定都是意识到了一些其它对象的存在,并且要和它们交流通信,朝着共同的目标去努力,这样才可能达成目标,正所谓众志成城也。从编程的角度来说,这些对象之间存在着依赖关系。
传统的建立这些依赖关系的方法,是让对象自己去记录、维护自己所依赖的对象,这本是一些本不属于它们自己工作范围的事情。这样也会增加对象之间的耦合度,使得它们难以复用、难以测试。
而在Spring里面,对象自己不需要负责去寻找或是创建它们所依赖的对象,而是由容器(container)来维护对象之间的引用关系。举个栗子,订单管理模块可能会需要一个信用卡授权模块,但是它不需要去创建这个信用卡授权模块——它只需要两手空空地现身,自然会有人给它一个信用卡授权模块。
这种创建应用程序对象之间的依赖关系的行为,就是DI的本质,也经常被称作装配(wiring),被装配到一起的对象,称为bean。有很多装配的方法,首先可以来感受一下配置Spring容器的三种最常见的方法。(引用自https://www.jianshu.com/p/fd42f668f5bb)
三、aop(面向切面)
AOP就是将程序功能中的频繁出现或者与主业务逻辑代码相关度不高的代码抽离出来,通过切面编程的方式在想要调用的时候引入调用的思想。而这种思想并不是只限于Spring和java,AOP(面向切面)和OOP(面向对象)一样都是一种编程思想,这种思想的实现机制在Spring中便是应用了java的动态代理和java的反射。在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),这是我们就可以封装一个封面,然后注入到目标对象(具体的业务逻辑)中去。这种在调用某个方法之前/后想要自动执行一系列自定义操作的就是AOP思想。