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。分别是 singletonprototype、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(业务层)

posted @ 2021-08-21 16:33  Drsyq  阅读(58)  评论(0)    收藏  举报