面试:Spring IOC 与 DI 、AOP的理解
Spring IOC
Inversion of Control 翻译为中文也就是控制反转,它不是一门技术,而是一种思想。
在我们传统编程方式中,我们都是在对象内部通过new进行创建对象,这样是程序主动去创建和依赖对象,什么时候申请资源、使用资源、释放资源。这样子造成了我们对象之间的耦合性很高,牵一发而动全身。而IOC是一个专门来管理对象容器,由IOC容器去控制对象的生命周期。我们只需要给IOC去列一张清单,这时候我们IOC就能把我们列出来的对象给管理起来。
控制 Control
控制指的是控制外部资源的获取、控制对象的生命周期。
翻转 Inversion
翻转是指传统编程我们都是通过在开发人员在代码中去管理bean,而现在使用Spring框架后由Spring IOC来控制程序中的外部资源、控制对象的生命周期等。所以取名“反转”,即控制的权利由开发人员转移到了Spring框架。由Spring框架帮我创建我们对象中依赖的对象,我们的对象只能被动的接受。
好处
对象和对象之间的耦合度变低了,便于测试、便于功能复用。
DI
DI(Dependency Injection)翻译成中文叫做“依赖注入”,既然对象的整个生命周期都是由Spring框架来维护的,那么我的这个对象中引用了另一个对象,你打算怎么办?Spring框架自然考虑到这一点了。“依赖注入”这两个词语也要拆开来讲:
依赖
我的A对象中引用了B对象,也就是说A对象依赖B对象。你要通过配置文件告诉Spring你的对象之间的依赖关系。
注入
你的对象已经交给Spring管理了,你也告诉Spring你的对象之间的依赖关系了,那么在合适的时候,由Spring把你依赖的其他对象注入给你。
AOP
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。我理解的核心思想就是把方法分为方面代码(共性代码)和业务核心代码。方面代码集中编码一次,编写业务时无需考虑方面的事情(比如日志,权限等)只需要专注于业务核心的实现,在方式执行会把方面代码织入目标方法中,大大降低了业务的复杂程度,并且增加了代码的可复用性。