【Spring面试高频】- spring的IOC和AOP的理解

本文详细解析了Spring框架中的两大核心概念:IOC(控制反转)与AOP(面向切面编程)。介绍了IOC如何通过容器管理对象创建及依赖注入,有效降低对象间的耦合度。同时探讨了AOP如何解决代码重复问题,通过横切关注点提高代码可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring的IOC和AOP的理解(面试题目)

首先什么是IOC呢?

IOC(Inversion of control)控制反转。它是一种设计思想而不是一个技术实现,描述的是Java开发领域对象的创建以及管理的问题。

例子:现有一个类A依赖类B

  • 如果按照传统的开发方式的话:往往是在类A手动通过new关键字来new一个B的对象出来;
  • 使用Ioc思想的开发方式: 不通过new关键字来创建对象了,而是通过Ioc容器(Spring框架)来帮助我们实例化对象。我们需要哪个对象,直接从Ioc容器里面找即可了。

从这上面的例子,可以更好的理解Ioc的控制反转的意思,即我们丧失了一个权力(创建、管理对象的权力),从而得到了一个好处(不用再考虑对象的创建、管理等一系列的事情了)。

控制: 指的是 对象创建(实例化、管理)的权力;

反转: 控制权交给外部环境(spring 框架、IOC容器)

通过第三方容器来管理资源这样的好处是什么呢?

  • 对象之间的耦合度或者说依赖程度就降低;
  • 资源变得很容易管理;比如用spring容器提供的话就很容易实现一个单例;

那么Ioc和DI呢?

Ioc(Inversion of Controller:控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由spring 框架来管理。Ioc容器是spring用来实现Ioc的载体,Ioc容器实际上就是个Map(key,value), Map中存放的是各种对象。Ioc最常见以及最合理的实现方式就是依赖注入(Dependency Injection,DI).

那么什么是AOP呢?

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

举例来理解:

例子:现有三个类,HorsePigDog

通过 OOP 思想中的继承,我们可以提取出一个 Animal 的父类,然后将 eat 和 run 方法放入父类中,HorsePigDog通过继承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提出横向抽取机制,将横切代码和业务逻辑代码分离。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMcSLxFB-1620884495198)(imgs\119.png)]

总之:AOP主要用来解决:在不改变原有业务逻辑的情况下, 增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值