IOC思想
IoC(Inversion of Control,控制反转)思想的提出,是为了解决传统的程序设计中,对象间的依赖关系问题。传统的程序设计中,对象之间的依赖关系是在编译期间确定的,而IoC思想则是将对象之间的依赖关系的控制权从程序员手中转移到了容器中,由容器来管理对象之间的依赖关系。这样做的好处是,程序员只需要关注对象的功能实现,不用再关注对象之间的依赖关系,降低了程序的耦合度,提高了程序的可维护性和可扩展性。同时,也方便了程序员对对象的管理和维护。
实际开发中,对象之间的耦合关系,就类似手表内部的齿轮,每个齿轮都紧密啮合在一起,一旦某个齿轮发生故障 ,那么整个系统也意味着崩溃。尽可能让对象之间的关系保持松耦合状态是我们期望的。
DI思想
“DI” 代表 “Dependency Injection”,是一种面向对象编程的思想,旨在解决模块之间的依赖关系,提高代码的可测试性、可维护性和可重用性。DI 的提出最初可以追溯到 Martin Fowler 在 2004 年所著的 “Inversion of Control Containers and the Dependency Injection pattern” 一书中。这本书探讨了如何使用 IoC 容器管理对象创建和依赖注入,使得系统更加灵活、可扩展和易于测试。通过 DI,我们可以将对象的创建和依赖关系的管理交给容器来完成,从而降低组件之间的耦合度,并使得应用程序更易于维护和扩展。
在图片中可以看到,UserService存在于BeanFactory中,UserDao也存在于BeanFactory中,它们可以在BeanFactory内部进行结合
AOP思想
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,旨在将程序中的横切关注点(如日志记录、性能统计、异常处理等)从主业务逻辑中剥离出来。AOP通过定义切点(程序执行的特定地方)和通知(执行在特定切点上的额外代码),使得程序可以在多个不同的地方插入相同的代码逻辑。这样可以提高代码的重用性、可扩展性和可维护性,同时也能够降低耦合度。常见的AOP框架有Spring AOP和AspectJ。
OOP是纵向对一个事物的抽象,一个对象包括静态的属性信息,包括动态的方法信息等。而AOP是横向的对不同事物的抽象,属性与属性、方法与方法、对象与对象都可以组成一个切面,而用这种思维去设计编程的方式叫做面向切面编程
总结
- IoC控制反转,是将程序创建Bean的权利反转给第三方;
- DI依赖注入,某个完整Bean需要依赖于其他Bean(或属性)的注入;
- AOP面向切面编程,用横向抽取方法(属性、对象等)思想,组装成一个功能性切面。