整理spring两大特征(IOC和AOP)

Spring两大特征(IOC和AOP)

Spring的核心特性是IOC和AOP,IOC即控制反转,AOP即面向切面编程。

IOC

IOC ,另一种说法叫DI(依赖注入),他不是一种技术实现,而是一种设计思想,在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述他们特有的功能,并且通过类与类之间的相互协作来实现特定的业务逻辑。这时候每个类都需要管理与自己有交互的类的管理与依赖,代码就会变得难以管理和极高的高耦合,而IOC的出现就是为了解决这个问题,我们通过IOC将这些相互依赖对象的创建、协调工作交给spring容器来做,而我们只需要关注每个类的业务逻辑关系即可。从这样的角度来看,获得依赖的对象的方式进行了反转,变成了有spring容器控制对象如何获取外部资源。

举例:某一天,你生病了,但是你不清楚自己到底得了什么病,你只知道自己头疼,咳嗽,全身无力。这个时候你决定去药店买药,药店有很多种药,仅仅是治疗头疼就有好几十种,还有西药中药等区别。然后你自己看了看说明书,选择了一盒你自己觉得最能治疗自己病症的药,付钱吃药,期待可以早点好起来。
但是这个过程,对于一个病人来说,太辛苦了。头疼,咳嗽,全身无力,还要一个个的看药品说明书,一个个的比较哪个药比较好,简直是太累了。这个时候,你决定直接去医院看医生。
医生给你做了检查,知道你的病症是什么,有什么原因引起的;同时医生非常了解有哪些药能治疗你的病痛,并且能根据你的自身情况进行筛选。只需要短短的十几分钟,你就能拿到对症下药的药品,即省时又省力

在上面的例子中,医生就是我们的IOC,他收集我们的需求要求,并且对症下药,直接把药开给你。你就是这个对象,药就是外部资源。通过医生,你不用直接找药品,而是通过医生把药品开给你。这就是IOC的精髓所在。

AOP

AOP是面向切面编程,我们的程序项目中,系统由许多不同的组件组成,每一个组件都有自己负责的一块功能。除了实现自身核心功能外,这些组建还经常承担着额外的职责。例如日志、事务管理等经常融入到这些自身有核心业务逻辑的组件中,这些系统服务经常被成为横切关注点,因为他们会跨越系统的各个组件。

AOP的概念和IOC不一样,不太好实例化举例,就拿系统中的一个具体实现来讲一下AOP具体是什么技术

我们以系统中常用到的事务管理举例子。在系统操作数据库的过程中,不可避免的要考虑到事务相关内容,如果在每一个方法中都创建一个事务管理,那么代码会变得很繁重和严重耦合。为了简化我们的开发过程(spring所做的一切都是为了简化开发),我们把事务相关的代码抽出来作为一个独立的模块,而后把每一个操作数据库的方法作为一个连接点,点多成线,线多成面,很多的连接点就组成了一个切面。当程序运行到其中一个切点时,就会用到事务管理模块,至此所有连接数据的方法都会用到事务管理。这样一来,我们不需要再单独关心事务管理的内容,只需要关注自身的业务逻辑实现即可。所有的事务管理相关都是通过AOP的方式实现。简化了代码块的内容,降低了耦合度,分离业务逻辑和横切关注点。

下面介绍一下AOP相关的术语:

  1. 通知: 通知定义了切面是什么以及何时使用的概念。Spring 切面可以应用5种类型的通知:

前置通知(Before):在目标方法被调用之前调用通知功能。
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
返回通知(After-returning):在目标方法成功执行之后调用通知。
异常通知(After-throwing):在目标方法抛出异常后调用通知。
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
2. 连接点:是在应用执行过程中能够插入切面的一个点。
3. 切点: 切点定义了切面在何处要织入的一个或者多个连接点。 切面:是通知和切点的结合。通知和切点共同定义了切面的全部内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值