Spring的核心是控制反转(Inversion of Control,简称IoC)和面向切面(Aspect Oriented Programming, 简称AOP),那么什么是IoC和AOP呢?
先谈谈我对什么是IoC的理解以及IoC的存在目的!
控制反转(IoC):IoC就是将控制对象的创建与销毁(生命周期)的控制权力交给IoC容器来管理。举个例子:现在卖二手车的比较多,那么我们会通过怎样的方式去寻找适合的二手车呢?以前的方式是我们可能自己去寻找,打听一些卖车的卖家,查看车的性能配置,往往这个过程是需要自己到处跑,传统的程序开发也是这样,在一个对象中如果要使用另外一个对象(依赖对象),我们必须自己去new一个对象,同时依赖的对象的创建的权力完全是由当前对象所决定的。这样的话就会导致耦合度比较高!IoC就相当于二手车交易平台,在这个平台中登记了所有的卖家的车辆信息,你需要什么样的二手车,只需要在平台上搜索,平台就会给你匹配对应的车,这就好比需要什么样的对象,IoC容器就会为我们创建什么样的对象。
控制反转(IoC)的目的:在做开发的时候需要各板块之间低耦合高内聚,因此控制反转的目的就是为了降低程序间的耦合性!
那么什么又是面向切面编程(AOP)?
面向切面编程(AOP)的目的:
-
解决代码重复性问题
-
关注点分离(分离功能性需求与非功能性需求)
面向切面编程(AOP):面向切面编程是OOP(面向对象编程)的补充而不是替代,使用AOP就是将非功能性需求从功能性需求中分离出来,一方面避免在业务逻辑中混入很多的系统相关的逻辑,另一方面,通过分离出来独立管理,然后通过切面切入系统,可有效地解决代码重复性问题。具体的意图(引用百度百科)为:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
本文仅为个人理解,如有错误还请指出!