注意:IOC和AOP不是spring提出的,在spring之前就已经存在,只不过更偏向于理论化,spring在技术层面把这个思想做了很好的实现(java)

1. 什么是IOC

Inversion of Control(控制反转),注意它是一个思想,不是技术实现。

  • 传统的开发方式:类A如果需要依赖类B,则需要在类A中new一个类B出来。
  • IOC思想下的开发方式:把类的创建、管理、销毁等等全都交给IOC容器(spring框架)来做,需要使用则从IOC容器中取出来(依赖注入方式取)
  • 控制:指的是对象创建的权力
  • 反转:这个权力给了IOC容器
  • 理解什么是IoC.png
  • IOC和DI的区别

IoC和DI的区别.png

2. 什么是AOP(面向切面编程)

  1. AOP是OOP的延续, Aspect oriented Programming
  2. OOP三大特性:封装、继承、多态

OOP纵向继承体系.png

  1. AOP解决问题:在不改变原有方法的,增强横切逻辑代码,根本上解耦合,避免横切代码重复问题
  2. 横切代码分离

横切代码分离.png

  1. AOP的主要应用:事务控制,权限校验、日志

3. Spring的核心模块

  1. spring-core:核心类库,包括资源访问等一些工具类,别的模块都会依赖此模块
  2. spring-beans:对 Bean 的支持,包括控制反转和依赖注入,核心工厂 BeanFacotry 就在这个模块。
  3. spring-context:Spring 的上下文,支持数据验证、国际化、事件传播等支持,ApplicationContext就在这里,可以理解为运行时的 Spring 容器。
  4. 基于上面的这些核心模块,Spring 也提供了很多重要的支持:
  • spring-aop:AOP 的支持
  • spring-jdbc:jdbc 的支持
  • spring-orm: orm 的支持
  • spring-webmvc: mvc 的支持
  • 等等