当前位置: 首页 > news >正文

谈谈 IOC 和 AOP

我之前面试的时候,真的会有面试官问这个。我感觉确实这个比较高频,因为 Spring 框架最核心的就是这两个东西嘛,掌握了这两个就相当于掌握了 Spring 的半壁江山了。

不过一般面试官不会一上来就问你什么是 AOP 和 IOC,一般都是叫你谈谈 Spring,这时候你就可以从这两个东西去谈了。之前对于这个题目我回答的不算好,所以今天花时间整理了一下应该如何回答。

IOC 就是控制反转,其实本来是程序员自己再代码中new对象的,现在交给Spring的IOC容器去创建了。对象的创建这样一个行为从程序员反转到了IOC容器。事实上,IOC只是一种思想而已,这种思想是通过依赖注入实现的。

我们知道每个类中都有很多个对象,而每个类其实都是互相有联系的,因为只有类与类之间互相有联系,才可以实现更强大的功能。由于类之间互相有联系,则不同类的对象很可能也是互相关联的。假如在一个类中创建一个对象A,这个对象A引用了另一个类的对象B,那A和B就紧耦合了。我们肯定不希望这样子写代码,因为这样写出来的代码太糟糕了,你一旦对其中一个对象做点啥,另一个对象就要跟着动代码,那这是我们不希望看到的。

而我们在做项目的时候,比如controller层,service层,dao层这种,你不会看到controller,service层会new一个对象出来,因为它们将创建对象的代码交给了Spring IOC去做了,如果controller层想要用service层的功能的时候,controller就会用@autowired注入service层的一些对象,就像打针一样注入给controller层,这样controller层就会使用service层的功能了。同时,因为我们将创建对象的代码放到了Spring IOC容器中,controller层和service层实现了解耦,这样代码的可维护性就会很强。

所以说,Sping中用了依赖注入的方式实现了控制反转的思想,使得不同类的对象之间能够共同完成复杂的功能的同时,还保证了松耦合。

而AOP其实也是一种设计思想,我的理解是在功能模块的业务代码的方法前后加上一些重复性的非代码模块(比如日志/事务/安全代码) 。通过AOP,我们就可以在不改变业务代码的情况下,对功能进行增强(比如给某个功能增加事务支持,安全支持之类的)。

http://www.lryc.cn/news/324040.html

相关文章:

  • C/C++之内存旋律:星辰大海的指挥家
  • Linux下进程的调度与切换
  • Linux相关命令(2)
  • React中 类组件 与 函数组件 的区别
  • GPT实战系列-智谱GLM-4的模型调用
  • AndroidStudio开发 相关依赖
  • Zookeeper详解(zk)
  • BSD-3-Clause是一种开源软件许可协议
  • 持续集成平台 02 jenkins plugin 插件
  • LoadBalancerCacheManager not available, returning delegate without caching
  • 机器学习金融应用技术指南
  • ES6生成器(Generator)
  • 大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集
  • 【No.13】蓝桥杯二分查找|整数二分|实数二分|跳石头|M次方根|分巧克力(C++)
  • 【蓝桥杯-单片机】基于定时器的倒计时程序设计
  • QT:三大特性
  • 无服务器推理在大语言模型中的未来
  • 【linux】CentOS查看系统信息
  • 部署dagu_1.12.10+replicadb0.15.1+sqlline1.12
  • 基于Java中的SSM框架实现社会保险管理系统项目【项目源码+论文说明】
  • 24计算机考研调剂 | 江西理工大学
  • Sentry(Android)源码解析
  • Android StateLayout状态页
  • JetBrains数据库驱动下载失败解决方法
  • 【vim 学习系列文章 16 -- vim 自动保存设置】
  • python的O2O生鲜食品订购flask-django-nodejs-php
  • 六、大模型-Prompt-API介绍
  • 嵌入式安全性基础知识-计算机系统安全知识+信息安全基础+网络安全协议-嵌入式系统设计师备考笔记
  • 基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现
  • jenkins构建完成后部署到本机,无法读取容器外文件夹