Spring:IOC、依赖注入、AOP是什么?

Java:反射
Java:设计模式
Java:反射动态代理
博主前言:上面三个知识点是理解Sprig中IOC、依赖注入、AOP的基础,如果不清楚的,还请先看完上面三篇博客。

大白话解释Spring中的IOC、依赖注入、AOP是什么

  • IOC(控制权反转)

工厂模式就是体现IOC的一种方法。工厂模式中Factory类就像是一个容器,其他类创建对象皆从该容器中取,而不再是自己主动new出来的,因此控制权就从主动反转为被动了。
引入Spring框架后,Spring就充当了这个容器,所有的类都会在spring中登记,所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。

  • DI(依赖注入)

控制翻转(Inversion of Control-IOC)和依赖注入(dependency injection-DI)在Spring环境下是同等的概念,控制翻转是通过依赖注入实现的。所谓依赖注入是指容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身去创建和解决自自己的依赖。依赖的主要目的是为了解耦,体现一种“组合”的理念。
–摘自01-SpringBoot——Spring基础-依赖注入

  • AOP(面向切面编程)

先来看下面这段话:现在需要执行某个“被动态代理的函数方法”。但是我想在执行之前输出一句“开始执行了!”,在执行之后输出一句“执行结束了!”,甚至在执行过程中发生异常时输出一句“执行出错!”,以及最后无论执行结果如何都输出一句“全部结束了!”,伪代码如下:

try {
	print("开始执行了!");
	proxyFunc();	//执行该“被动态代理的函数方法”
	print("执行结束了!");
}catch (Exception e){
	print("执行出错!");
}finally {
	print("全部结束了!");
}

这样的编程方式就叫AOP(面向切面编程)。那么为什么要叫“面向切面”呢?首先得先知道两个概念:切入点和通知。其实很简单,上面伪代码中的函数方法proxyFunc()就叫作“切入点”;那些print操作就叫作“通知”;所以,这种编程方式就叫“面向切面编程”。
关于“切入点”和“通知”,总结如下:

  • 切入点:被动态代理的类中“要被添加一些额外操作”的方法被称为切入点
  • 通知:被动态代理的类的切入点中要做的事,即“添加的一些额外操作”,被称为通知

我们举个更具体的例子,伪代码如下

try {
	//开启事务
	transactionManager.beginTransaction(); //前置通知
	//执行操作
	proxyTransactionFunc();	//被动态代理的事务处理函数
	//提交事务
	transactionManager.commit(); //后置通知
}catch (Exception e){
	//回滚操作
	transactionManager.rollBack(); //异常通知
	throw new RuntimeException();
}finally {
	//释放链接
	transactionManager.release(); //最终通知
}

猜你喜欢

转载自blog.csdn.net/w_y_x_y/article/details/100580115