理念

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

什么是IOC

Ioc Inversion of Controller(控制反转/反转控制),它是一个思想,不是一个技术实现,描述事情:Java开发领域对象的创建和管理问题。
传统开发方式:比如类A依赖于类B,往往在A对象中new一个对象B
控制:指的是对象创建(实例化、管理)的权利
反转:控制权交给外部环境(Spring框架、IOC容器)

Ioc和DI的区别

理解:IOC和DI描述的是同一件事情,只不过是角度不同罢了
ioc:IOC是站在对象的角度,对象要创建了,就把管理的权限交给了(反转)容器
DI:DI是站在容器的角度,容器把对象依赖的其他的对象注入,比如A对象实例化过程中因为声明了一个B类型的属性,那么容器就会把B对象注入给A

AOP

AOP:Aspect oriented Programming 面向切面编程
AOP是OOP的延续。OOP三大特征:封装、继承和多态
image.png
OOP编程思想可以解决大多数代码重复的问题,但是有一些情况是处理不了的,比如下面的情况:
image.png

AOP在解决什么问题

在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
切:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以面向横切逻辑
面:横切逻辑代码往往要影响的是很多个放发,每个放发都如同一个点,多个点构成面,有一个面的概念在里面

扩展部分

https://mp.weixin.qq.com/s/g-Zotlbzi-VZez0jFcMCOw

面试题

  • Spring中Bean的生命周期有哪些步骤?
  • 什么是BeanDefinition?它为什么非常重要?
  • 什么是Bean的后置处理器?
  • 什么是Bean工厂的后置处理器?
  • 什么是BeanFactory?它与ApplicationContext的区别?
  • 什么是FactoryBean?它与BeanFactory的区别?
  • @Import、@Component、@Bean的区别是什么?
  • 什么是ImportBeanDefinitionRegistrar?它的作用是什么?