说一说你能听懂的AOP 与IOC

说一说你能听懂的AOP 与IOC!!

在这里插入图片描述

首先谈一下AOP(Aspect Oriented Programming)
也就是我们熟知的面向切面编程简单的解释一下,就是在原有逻辑不变的情况下,添加一些额外的功能。
(Struts2的拦截器设计就是基于AOP的思想)

AOP有哪些基本思想呢?

听到这个问题,我们要先有自己的思想,aop的流程是什么样的?
我们首先想到切入点(Pointcut):也就是哪些包中的哪些类中的哪些方法。也可认为是连接点的集合
说白了就是到底要去哪里做通知?
那过了切入点,我们要干嘛呢?自然是做通知(Advice):也就是在什么时机,需要做什么样的通知?
(时机分为:前置增强、后置增强、异常增强、最终增强、环绕增强)
然后?这个时候我们想到切面(Aspect):也就是pointcut+Advice 连起来就是在哪里,做什么样的通知
(注:定义切面类的时候只需要加上@Aspect注解即可)
那么找到了需要在哪里加上增强,我们要干嘛呢?自然是加代码啦!
名词叫做织入 (weaving):也就是指将切面代码插入到目标对象的过程
目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入
以上就是AOP的基本思想,听到这,你是不是懂了AOP~!

那我们要继续IOC了哦!!
在这里插入图片描述

我们谈一下什么是IOC(Inversion of Control)

也就是我们熟知的控制反转
简单的解释一下,就是为了使原本耦合度极高的逻辑,降低耦合度,也就是解耦。
我们看下图一和图二就能明白ioc的基本思想了
在这里插入图片描述

									图一

在这里插入图片描述
图二
我们分析一下,如果第一个图中的任何一个齿轮出现问题,那么所有的都会无法运行。
而第二个图中,即使有的类出现问题,但其他类依旧可以正常运行。这极大程度的实现了解耦的思想。
个人理解时间(就是大白话):IOC又名控制反转,那么何为控制反转?
第一张图就是没有引入第三方IOC的时候,也就是a依赖于b,每当a需要用到b的时候,那么就必须要创建b这类,然后使用,a又要C了,那就需要继续创造c,全部都关联起来。也就是全部都是由自己控制的。
但是引入IOC后,当a需要b,那么会由ioc主动创造对象b,然后提供给a使用。
a需要使用对象c了,那就继续由ioc主动创造c注入给a进行使用。
换句话说,从刚开始a需要自主的去获取对象b,变成了ioc帮忙去把b注入给a。这时候控制权交到了IOC手里,控制权发生了转变,所以IOC的思想,就叫做控制反转。

说完了思想,我们来讲一下IOC底层使用的技术,

IOC最基本也是最重要的技术就是反射(Reflection)

简单点说,反射就是根据给出的类名(字符串方式)来动态地生成对象,这种编程方式可以让对象在生成时才被决定到底是哪一种对象。
简单的理解一下,我们都知道平常new创建的对象,是在编译时就被确定的,但是程序运行时可能需要动态的加载一些类,这时候就需要用到反射。简单的理解就是JVM在编译时,会将java文件编译成为.cless结尾的文件,而反射就是对.class文件进行反编译。

我们说完了IOC(inversion of Control) 大家都知道还有另一个思想是密不可分的–>依赖注入(Dependency Injection)

依赖注入是什么?

就是我们a需要对象b的时候,ioc会通过注入的方式,来将对象b注入到a中,让a可以使用对象b。
简单点说,IOC只是用来创建对象,而真真正正注入给类中还是需要DI操作。
连接起来呢就是,引入IOC后,使用DI这种方式,也就是依赖注入的方式,实现解耦合的思想。

给大家举个直观的例子,我们都知道,苹果手机上有充电口,当你连接充电器的时候,手机只知道,这个时候需要用到充电器来进行充电。而转眼你拔出了充电器,插上了耳机,这时候手机只知道这时候需要用耳机来传递声音。这份控制权是由我来定的,我想让他充电,我就插充电器,我想听音乐,我就插耳机,
而我只需要秉承一个原则,就是这个口是苹果通用的即可。也就是说,我就好比IOC这个容器,来对手机进行依赖注入。最后你只需要知道,你需要什么,IOC会给你创造出来送过去,使用完了由ioc进行清理。

看到现在,我们只能感叹IOC这种思想,可以说极其的牛
为什么这么说,我们继续拿手机来说。
首先,在充电器或者耳机插入之前,和手机没有一点关系,无论你使用手机操作什么,或者充电器给哪个手机充电,都可以,这就是我们一直追求的思想,解耦合!
其次,你想,既然充电器可以适用于任何手机,那么这种可以重复适用于不同地方的行为,在java中可以被称作什么?复用性!!
而且,既然充电器产生了问题,也不会影响手机的使用,也就是正常情况下双方没有联系,那么我们完全可以多人进行开发,只要保证结果即可,不需要说两个或者多个人的思维逻辑要整合到一起,在平常工作中,这种行为叫什么?开发效率!!
这些就是为什么要选择IOC,是不是恍然大悟~!

本期文章就到这里了,希望这个知识点被大家get到了!

注:以上仅代表个人意见,如果大家发现问题欢迎指正,博主只是呕心沥血去奉献的一名java开发,大家共勉。
–甜橙棒棒糖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值