IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring 的 IOC 和 AOP -> 正文阅读

[Java知识库]Spring 的 IOC 和 AOP

Spring IOC

什么是IOC?

控制反转解释:
控制:指的是对象创建(实例化、管理)的权利
反转:控制权交给外部环境了(spring框架、IoC容器)

与传统开发方式相比在IOC的思想开发方式下,当类A需要以来类B时,我们不要自己去new对象了,而是由IOC容器帮我们实例化对象并且去管理它,我们需要什么对象直接从IOC容器中获取即可,由此我们可以省去创建和管理对象的一系列事情,也丧失了创建、管理对象的权力。

IOC解决了什么问题

IoC解决对象之间的耦合问题,例如当service层调用dao层时,传统方式下我们需要在service中new出dao层的具体实现类,这时当我们实现类需要改变时,service层也需要做相应的改变,这就造成了service层和dao层的强耦合。

IOC和DI的区别

IOC和DI(依赖注入)其实描述的都是对象实例化和依赖关系维护这同一件事情,只是角度不同。IOC是站在对象的角度,对象的实例化和管理交给了容器(反转);DI是站在容器的角度,容器会把对象所依赖的对象注入,例如A对象在实例化的过程中声明了B对象,那么容器就会把B对象注入给A。

依赖注入的相关注解?

@Autowired :自动按类型注入,如果有多个匹配则按照指定的Bean的id查找,查找不到会报错。
@Qualifier :在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired,给方法注入时可单独使用。
@Resource:直接按照Bean的id注入,只能注入Bean类型。
@Value:用于注入基本数据类型和String类型

Spring AOP

AOP: Aspect oriented Programming ?向切?编程/?向??编程,AOP是OOP的延续。
OOP的三大特征: 封装、继承和多态
opp思想是一种垂直纵向的继承体系,解决了代码开发中的大多数代码重复问题,例如当我们由三个类(pig、dog和cat),其中每个类中都有相同的方法(eat(); run();),那么未来避免代码重复,oop思想下我们就可以提取父类(animal),在父类中设置通用的属性(weight、height、eat(); run(); … …),让原有的类继承该类,这样子类中就可以不再重复写这些方法了,同样子类下的子类依然可以通过继承父类来避免代码的重复。示例图如下:

但是当顶级父类(animal)中的多个方法中的相同位置出现重复代码时,如下图,OOP的思想就无法解决了。此时我们就需要用到AOP的思想了。

?首先解释此类重发代码被称为“横切逻辑代码”,即在多个纵向(顺序)流程中出现的多个相同子流程代码。
此类代码的使用场景通常有:事务控制、权限校验和打印日志中。

横切逻辑代码存在什么问题:
   1、横切代码重复问题;
   2、横切逻辑代码和业务代码混杂在?起,代码臃肿,维护不?便。

AOP提出了横向抽取机制,将横切逻辑代码和业务逻辑代码分离,在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

AOP的相关注解有哪些?

@Aspect:声明被注解的类是一个切面的Bean;
@Before:前置通知,指在某个连接点之前执行的通知;
@After:后置通知,指某个连接点退出时执行的通知(不论程序是正常返回还是异常退出)
@AfterReturning:返回后通知,指某连接点正常完成之后执行的通知,返回值使用returning属性接收。
@AfterThrowing:异常通知,指方法抛出异常导致退出时执行的通知,和@AfterReturning只会有一个执行,异常使用throwing属性接收。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:07:17  更:2022-09-25 23:08:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:01:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码