理解Spring框架中IOC和AOP概念(白话案例)
in 编程SpringJAVA with 0 comment

理解Spring框架中IOC和AOP概念(白话案例)

in 编程SpringJAVA with 0 comment

Spring框架的IOC和AOP这两个概念听起来非常高大上,官方的描述比较空洞难以理解,米虫用大白话来举两个例子阐述起来更加形象便于接收了解

SpringAopSay.jpg

IOC的概念

控制反转(Inversion of Control)和依赖注入(Dependecy Injection)是同一个概念
当某个方法需要另外一个对象协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例
在Spring中创建被调用者的工作不再由调用者来完成,称为控制反转
创建被调用者的工作由spring来完成,然后注入调用者,称为依赖注入
其作用是为了解耦,降低类之间的耦合度,其设计思想就是设计模式的工厂模式
在Spring容器启动的时候,Spring会把你在application.xml中配置好的bean都初始化
需要调用的时候,把初始化的Bean分配给你要调用的类,不用去手工创建一个对象的实例

白话IOC的概念

传统的程序设计过程

采用IOC容器的设计过程

想获得这样的便利,你需要几个前提:

Spring框架就相当于这个APP

Spring就直接给你配送实例Bean过来

AOP的概念

AOP(面向切面编程)可以说是对OOP(面向对象编程)的补充和完善
当我们需要为分散的对象引入公共行为的时候,OOP就显得无力,OOP不能解决从左到右的关系
例如公共的日志处理,权限处理,事务之类的代码往往分散于很多功能逻辑代码中,产生大量重复代码
可以把这些代码封装成一个切面(新的类&方法),然后注入到目标对象中
注意:这里不要理解为工具类,工具类是由方法调用的,AOP的代码会与功能逻辑代码完全剥离,也无调用关系
Spring框架中的AOP主要表现为两个方面: 提供声明式事务管理、支持用户自定义的切面

白话AOP的概念

你是个公子哥,天天就是衣来伸手,饭来张口,整天只知道玩一件事
每天一睁眼,就光想着吃完饭就去玩(你必须要做的事)
在玩之前还需要穿衣服、穿鞋子、叠好被子、做饭等等
但是你只想吃饭然后玩,怎么办呢?
这些事情通通交给别人去干
在你走到饭桌吃饭之前
有一个专门的仆人帮你穿衣服、帮你穿鞋子、帮你叠好被子、帮你做饭
你就直接开始吃饭、去玩
当你玩完回来
一系列仆人又开始帮你干这个干那个
这一天就结束了

AOP的好处就是你只需要干你的事,其它事情别人帮你干
也许有一天,你不想穿衣服,那么你把相应仆人解雇
也许有一天,出门之前你还想带点钱,那么再雇一个仆人专门帮你干取钱的活

这就是AOP,每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构

AOP最大的用途就在于提供了事务管理的能力:
访问数据库,不想管事务(太烦),所以Spring框架在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

Responses