浅谈Spring中AOP与IOC

浅谈AOP与IOC

首先在谈论之前先说一说这两个名字分别代表什么意思(因为简称无非就是英语意思)。AOP(Aspect Oriented Programming)面向切面编程IOC(Inversion of Control)控制反转

1.首先我们来谈一谈AOP

相信大家也和我一样,做项目的时候都是跟着别人做项目的顺序或者模板制作,然而都没有想过为什么要这么做或者有什么原因。这里解释一下Spring作为一个框架是如此受人们欢迎。
我暂且是认为Spring框架就相当于是一个工具包,我们如果没有使用他,很多功能和实现都需要我们一行一行的敲进项目,但是其中有很多相同的代码和相同的功能。每次做一个项目这些都要不停的反复重复,工作效率低的同时也会觉得麻烦。而Spring就相当于帮我们做了这些重复的工作,另外Spring在解耦方面也是相当优秀的。
好了好了,言归正传。AOP其主要思想是让开发者把诸多业务流程中的通用功能抽取出来,单独编写功能代码,形成独立的模块,这些模块也被称为切面。这样即便于大伙儿开发,也便于后续的维护。
这里解释一下AOP中的一些属于(我理解了的哈)
aspect(切面):就是将你的各个独立模块抽象为一个面。
joinpoint(连接点):就是业务流程在运行过程中需要插入切面的具体位置。
weaving(织入):将切面应用到目标对象从而创建一个新的代理对象的过程。
advice(通知,没咋了解):是切面的具体实现方法。
pointcut(切入点):用于定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上。
proxy(代理对象):将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被切入的切面所形成的对象。

2.IOC有什么用,怎么用

IOC控制反转是一种设计原则,主要用来减低计算机代码之间的耦合度。
我们可以将写的项目看做是一只手表,我们掀开表盖后能看见一个个大小不同的齿轮相互啮合,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。
在这里插入图片描述
我们可以将各个类看做是不同的齿轮,正是他们相互合作运作,才能让我们的项目运行。但是这样看上去他们之间的耦合度是特别高的,假设其中一个类出了问题,其他类也会受到影响。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。所以IOC也由此应运而生。

对于ioc来说,最重要的是容器,容器管理bean的生命周期,控制依赖的注入。
在这里插入图片描述
由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。
假设我们将IOC现在从图中拿下来:
在这里插入图片描述
我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系!
我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下:

软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。

软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

以上就是我对最近面试老是反复问到AOP和IOC的总结,希望能够对未来的你有所帮助。

参考文章:
AOP参考文章
IOC参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值