简介
什么是IOC?(控制反转)
IOC控制反转(Inversion of Control),是一种设计思想。在面对对象程序设计中,底层由N个对象构成,各个对象之间通过相互合作,最终实现系统地业务逻辑。IOC引进了中间位置的“第三方”,也就是IOC容器,使得各个对象之间没有了耦合性,全部对象的控制权全部上缴给“第三方”IOC容器。所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用。
借助“第三方”实现具有依赖关系的对象之间的解耦。
软件系统在没有引入IOC容器之前,对象A依赖与对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统引入IOC容器之后,这种情况就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”
既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,答案是:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,“控制反转”有了更合适的名字叫做“依赖注入(Dependency Injection)”。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情。
什么是AOP?(面向切面编程)
AOP面向切面编程(Aspect Oriented Program),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。可以说是OOP编程的补充和完善。是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
提高程序可用性,减少代码量,提高开发效率。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
提供声明式事务;允许用户自定义切面。
优缺点
IOC的优缺点
优点:实现组件之间的解耦,提高程序的灵活性和可维护性。
缺点:1、对初学者来说,创建对象的步骤变复杂了,不直观。
2、因为使用反射来创建对象,所以在效率上会有些损耗。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改。
AOP的优缺点
优点:使开发人员在编写业务逻辑时可以专心于核心业务,而不用过多的关注于其他业务逻辑的实现,这不但提高了开发效率,而且增强了代码的可维护性。
应用场景
IOC的应用场景:在 Spring 中,Spring IoC 提供了一个基本 JavaBean 容器,通过 IoC 模式管理依赖关系,并通过依赖注入和 AOP 切面增强了为 JavaBean 这样的实体类对象提供了事务管理、声明周期管理等功能。
AOP的应用场景:在spring中,有三种方式使用AOP(使用AOP织入,需要导入一个依赖包!)
方式一:使用SpringAPI接口
方式二:自定义类【推荐】
方式三: 使用注解
总结
IOC总结:IOC就是控制反转。就是对象的创建权反转交给Spring,由容器控制程序之间的依赖关系,作用是实现了程序的解耦合,而非传统实现中,由程序代码直接操控。
AOP总结:这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。