首页 > 编程知识 正文

刚开始做ipqc真的很累(没经验怎样面试ipqc)

时间:2023-05-04 23:15:13 阅读:83696 作者:3725

原文地址: https://gyl-coder.top/spring/spring-IOC-AOP /

本文从以下几个问题来介绍IoC AOP

什么是国际奥委会? IoC解决了什么问题? IoC和DI有什么区别? 什么是AOP? AOP解决了什么问题? AOP为什么被称为面条编程? 首先,IoC AOP不是Spring提出的,在Spring之前就已经存在了,但是当时更偏向理论。 Spring在技术水平上很好地实现了这两种思想。

什么是 IoC

IOC(inversionofcontrol )控制反转/反转控制。 那是思想,不是技术的实现。 介绍Java开发域对象的创建和管理问题。

例如,现有的a类依赖于b类

以往的开发方法:在大多数情况下,在a类中是用new关键字new一个b对象,使用IoC思想的开发方法。 不是用new关键字创建对象,而是用IoC容器(Spring框架)帮助实例化对象。 我们需要哪个对象,直接通过IoC容器就可以了。 从以上两种开发方式的对比来看,我们“失去了一个权力”(创建、管理对象的权力),从而获得了一个好处)。

为什么叫控制反转

控件:创建(实例化、管理)对象的权限

反转:将控制交给外部环境(Spring框架、IoC容器) )。

IoC 解决了什么问题

IoC的思想是,双方互不依赖,由第三方容器管理相关资源。 这样有什么好处?

对象之间的耦合度或依赖度降低,资源的管理变得容易。例如,通过Spring容器提供就可以简单地实现一个例子。 例如,针对现有用户的操作是利用服务和Dao的2层结构开发的

如果不使用IoC思想,则如果Service层要使用Dao层的具体实现,则需要使用new关键字向UserServiceImpl提交IUserDao的具体实现类UserDaoImpl (直接在new上提交new接口类)

完美。 这个方法也可以实现,但请想象以下场景。

开发中突然受到新的需求,针对IUserDao接口开发了另一个具体的实现类。 由于服务器层依赖于IUserDao的具体实现,因此需要修改UserServiceImpl的new对象。 如果只有一个类引用了IUserDao的具体实现,您可能会觉得没问题,但修改起来并不费力。 但是,如果很多地方引用了I-userdao的具体实现,那么I-userdao的实现方式需要更改的话,修改就会非常头疼。

运用IoC的思想,我们将对象的控制权(创建、管理)交给IoC容器进行管理。 我们使用时直接向IoC集装箱“要”就行了

IoC 和 DI 别再傻傻分不清楚

IOC (控制反转) )是一种设计思想或某种模式。 该设计思想是将原本通过程序手动创建的对象的控制权交给Spring框架进行管理。 IoC在其他语言中也有使用,并非Spring特有。 IoC容器是Spring实现IoC的载体,IoC容器实际上是Map(key,value ),map中存储着各种对象。

IoC最常见合理的实现方式被称为依赖注入(Dependency Injection,简称DI )。

而且,友好的冰淇淋(Martin Fowler )在一篇文章中提到了将IoC改名为DI。 原文如下,原文地址为https://martinf

owler.com/articles/injection.html 。

友好的冰淇淋的大概意思是 IoC 太普遍并且不表意,很多人会因此而迷惑,所以,使用 DI 来精确指名这个模式比较好。

什么是 AOP

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。

下面我们先看一个 OOP 的例子。

例如:现有三个类,Horse、Pig、Dog,这三个类中都有 eat 和 run 两个方法。

通过 OOP 思想中的继承,我们可以提取出一个 Animal 的父类,然后将 eat 和 run 方法放入父类中,Horse、Pig、Dog通过继承Animal类即可自动获得eat() 和 run() 方法。这样将会少些很多重复的代码。

OOP 编程思想可以解决大部分的代码重复问题。但是有一些问题是处理不了的。比如在父类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了。

/**  * 动物父类  */ public class Animal {     /** 身高 */     private String height;     /** 体重 */     private double weight;     public void eat() {         // 性能监控代码         long start = System.currentTimeMillis();         // 业务逻辑代码         System.out.println("I can eat...");         // 性能监控代码         System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");     }     public void run() {         // 性能监控代码         long start = System.currentTimeMillis();         // 业务逻辑代码         System.out.println("I can run...");         // 性能监控代码         System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");     } }

这部分重复的代码,一般统称为 横切逻辑代码。

横切逻辑代码存在的问题:

代码重复问题横切逻辑代码和业务代码混杂在一起,代码臃肿,不便维护

AOP 就是用来解决这些问题的

AOP 另辟蹊径,提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离

代码拆分比较容易,难的是如何在不改变原有业务逻辑的情况下,悄无声息的将横向逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果。

AOP 解决了什么问题

通过上面的分析可以发现,AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

AOP 为什么叫面向切面编程

切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑

面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。