Spring
2021-08-16 12:41:47 星期一 system.out.println("hello,world");
Spring的大致流程
Spring是一个快速开发的框架,帮助程序员管理对象
1.在创建 Spring 容器,也就是启动 Spring 时
🅰️首先会先进行扫描(所有的类),将扫描得到的 BeanDefinition 对象,存到一个 Map 里
🅱️然后筛选出懒加载的单例 BeanDefinition 进行创建 Bean,对于多例 Bean 不需要在启动过程中区创建,它会在每次获取 Bean 时利用 BeanDefinition 创建
🅲利用 BeanDefinition 创建 Bean 就是创建 Bean 的生命周期,这期间包括合并 BeanDefinition、推断构造方法、实例化、依赖注入、初始化前、初始化、初始化后等步骤,其中AOP就是发生在初始化后这一步骤中
2.单例 Bean 创建完成✅之后,Spring 会发布一个容器启动事件
3.Spring 启动结束🔚
4.源码中更加复杂,比如源码中还涉及到 BeanFactoryPostProcessor(Spring的扫描)和 BeanPostProcessor(IOC、AOP)的注册®️,Spring启动的过程中还会处理 @Import 等注解
2021-08-16 16:57:39 星期一
Spring的事务机制
- Spring事务底层是基于数据库事务和AOP机制的
- 首先对于使用了@Transactional注解的Bean,spring会创建一个代理对象作为bean
- 当调用这个代理对象的方法时,会先判断该方法上是否加了@Transactional
- 加了,利用事务管理器创建一个数据库连接
- 并且修改数据库连接的autocommit属性为false,禁止此连接的自动提交,这个是实现spring事务非常重要的一步
- 然后执行当前方法,方法会执行sql
- 执行方法后,如果没有出现异常就直接提交事务
- 如果出现了异常,并且这个异常需要回滚的就会回滚事务,否则依然提交事务
- 事务 ---> 要么全是失败,要么全部成功
2021-08-16 20:10:00 星期一
spting的ioc与aop
为何spring中的bean是单例的
2021-08-21 16:08:23 星期六
Spring提供了五中scope。分别是 singleton、prototype、request、session、global session。
我们主要讨论前两者的区别?
当一个bean被声明为单例模式的时候。在处理多次请求的时候在Spring 容器中只实例化一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。当有新的请求的时候先从缓存(map)里面查看有没有,有的话直接使用这个对象,没有的话实例化一个对象。
对于prototype类型的bean每次请求都会直接实例化一个新的bean,没有缓存以及从缓存中查询的过程。
注册bean
2021-08-21 16:21:48 星期六
主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:
@Component:可以用于注册所有bean
@Repository:主要用于注册dao层的bean(持久层)
@Controller:主要用于注册控制层的bean(表现层)
@Service:主要用于注册服务层的bean(业务层)

浙公网安备 33010602011771号