[由零开始] 九、深度理解Spring框架IOC和AOP

深度理解Spring框架IOC和AOP

注意 IOC与Aop 这两个概念并不是Spring提出的 只是Spring在技术层面上做了非常好的实现,
后面我们将通过手写来理解 为什么要这么写以及这么写的好处

Ioc容器

什么是IOC?

IOC Inversion of Control (控制反转/反转控制) 他是一个技术思想不是一个技术实现
描述的事情: Java开发领域的对象创建, 管理问题
传统开发方式: 比如类A依赖于类B 往往会在类A中 new一个类B
IOC思想下: 我们不去new了 我们需要什么就去IOC容器中要 IOC容器(也就是Spring框架)会帮助我们实例化并管理它们
我们丧失了一个权利(创建、管理对象的权利)
我们获得了一个福利(不用考虑一系列对象创建 管理等问题)
为什么叫做控制反转?
控制: 指的是对象创建(实例化、管理)的权利
反转: 说的控制权是交给了外部(IOC Spring框架去处理)

区别

在这里插入图片描述

Ioc解决了什么问题

如果正常情况下 我们在Spring中的面向接口开发时的代码是这样的
(@Autowired自动装配 后面我们会去实现这个注解)

public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    }

如果我们没有用Ioc容器呢

public class UserServiceImpl implements UserService {
	//接口不可以new 只可以new对应的实现类
    private UserMapper userMapper = new UserMapperImpl();
    }

这是这样一来 我们的UserServiceImpl就和UserMapper的实现类耦合在了一起
我们这么操作都是要new一个UserMapperImpl的
如果UserMapper有多个实现类 或者实现类需要更改代码
这就带来了一个问题
对象与对象间的耦合问题

IOC和DI的区别

DI:Dependancy Injection(依赖注入)
怎么理解: IOC和DI描述的是同一件事情,只不过⻆度不一样罢了

AOP思想

什么是 AOP?

AOP: Aspect oriented Programming 面向切面编程/面向方面编程 AOP是OOP的延续,从OOP说起
OOP三大特征:封装、继承和多态

OOP是一种垂直继承体系
我们知道我们编程的时候会有大量重复代码
比如 类A中的 大部分方法 类B也用到了 我们就可以写一个父类
然后类A与类B都去继承父类
父类包含类A与类B重复的方法
这样就是用OOP去解决了代码重复问题

但是有情况下OOP是解决不了一些代码重复的问题的
比如拿刚才的情况举例 如果父类中包含很多重复代码 利用OOP是解决不掉的
有的人说把重复代码提取出来 变成一个方法
可是那样还是会出现重复调用方法的重复代码

这个时候我们就要讲一下什么是横切逻辑代码了
在这里插入图片描述
简单的画了一个图
大家应该就明白了横切代码指的是什么
一般来说横切代码存在有限 一般就是事务控制、权限校验和日志

那么横切逻辑代码存在什么问题:
1、横切代码重复问题
2、横切逻辑代码和业务代码混杂在一起,代码臃肿,维护不方便

AOP出场,AOP独辟蹊径提出横向抽取机制,将横切逻辑代码和业务逻辑代码分析
在这里插入图片描述
代码拆分容易,那么如何在不改变原有业务逻辑的情况下,悄无声息的把横切逻辑代码应用到原有的业 务逻辑中,达到和原来一样的效果,这个是比较难的

AOP解决了什么问题?

在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复

为什么叫面向切面编程?

「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以面向横切逻辑
「面」:横切逻辑代码往往要影响的是很多个方法,每一个方法都如同一个点,多个点构成面,有一个 面的概念在里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值