spring源码笔记(一)

本文探讨了Spring框架中的关键特性,包括@Transaction注解的使用,如其在public方法上的应用以及对异常的处理策略。接着介绍了IOC(控制反转)的概念和作用,解释了如何通过IOC容器降低对象间的耦合。进一步阐述了DI(依赖注入)与IOC的关系,然后深入到AOP(面向切面编程)的原理,说明AOP是如何解决横切逻辑代码的重复和解耦问题。最后,作者预告将通过手写IoC和AOP示例来加深理解,并邀请读者关注后续内容。
摘要由CSDN通过智能技术生成

spring源码

@Transactional [trænˈzækʃən(ə)l]

@transactional 的使用
1、一般在service里加@Transactional注解,不建议在接口上添加
2、加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理机制。
3、@Transactional注解只能应用到public修饰符上,其它修饰符不起作用,但不报错。
4、默认情况下此注解会对unchecked[ʌnˈtʃekt]异常进行回滚,对checked异常不回滚。

检查@Transactional不回滚解决方案
1,检查方法是不是public
2,检查异常是不是unchecked异常
3,如果是checked异常也想回滚的话,注解上写明异常类型即可@Transactional(rollbackFor=Exception.class)

什么是ioc
ioc控制反转,ioc是一个技术思想,spring框架实现了ioc而已。
举个列子:
没有ioc容器的情况下:有3个类,分别是主类、a类、b类,a依赖b,在a中new B();,在主类中有要去new a();
有ioc容器的情况下:ioc容器实例化对象并存储起来,用哪个对象的时候问IOC容器要就好了。
在这里插入图片描述

控制:指的是对象(实例化、管理)的创建的权力
反转:控制权交给了spring框架、ioc容器

IOC解决了什么
对象于对象之间的耦合问题

IOC和DI的区别:
IOC和DI其实描述的是同一件事情(描述对象实例化及依赖关系维护),只不过是角度不同。
IOC是站在对象的角度,把对象实例化以及管理的权力交给了(反转)容器;
DI是站在容器的角度,容器会把对象依赖的其他对象注入;
DI概念出现在IOC之后
在这里插入图片描述

什么是AOP

那说要说一下oop,因为oop解决不了父类中发法相同位置出现的重复代码块(横切逻辑代码);
在这里插入图片描述
在多个纵向(顺序)流程中出现的相同子流程代码块中我们称之为横切逻辑代码。
横切逻辑代码的使用场景很有限:一般用做事务控制、权限校验、日志。
横切逻辑代码重复问题、与业务逻辑代码混杂在一起,代码臃肿,维护不方便。
于是AOP就这么出现,AOP提出横向抽取机制,将横切逻辑代码和业务逻辑代码拆分出来,在不改变原有业务逻辑的情况下,把横切逻辑代码应⽤到原有的业务逻辑中,达到和原来⼀样的效果。

AOP在解决什么问题
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。
在这里插入图片描述

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

(ps:明天手写一个简单实现 IoC 和 AOP例子有于消化理解IOC和AOP思想,文章格式明天中午调一下,欢迎关注我,带你一起学习spring源码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

why don't you

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值