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(); //最终通知
}
还没有评论,来说两句吧...