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

喜欢ヅ旅行 2024-04-18 12:20 181阅读 0赞

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(面向切面编程)

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

  1. try {
  2. print("开始执行了!");
  3. proxyFunc(); //执行该“被动态代理的函数方法”
  4. print("执行结束了!");
  5. }catch (Exception e){
  6. print("执行出错!");
  7. }finally {
  8. print("全部结束了!");
  9. }

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

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

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

  1. try {
  2. //开启事务
  3. transactionManager.beginTransaction(); //前置通知
  4. //执行操作
  5. proxyTransactionFunc(); //被动态代理的事务处理函数
  6. //提交事务
  7. transactionManager.commit(); //后置通知
  8. }catch (Exception e){
  9. //回滚操作
  10. transactionManager.rollBack(); //异常通知
  11. throw new RuntimeException();
  12. }finally {
  13. //释放链接
  14. transactionManager.release(); //最终通知
  15. }

发表评论

表情:
评论列表 (有 0 条评论,181人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么依赖注入与Ioc容器了

    背景 在很多编程语言(例如java)开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,