IOC容器 Bean管理
Spring官网
1. BeanFactory与ApplicationContext
- BeanFactory启动时候不会初始化,只有获取bean的时候才会初始化对象,是顶级父类;
- ApplicationContext启动的时候就会初始化对象,是BeanFactory的子类,两者都为接口,可通过lazy_init设置为懒加载;
2. 普通bean与FactoryBean
1.普通bean的返回值与其类型一致,而factoryBean与其类型可以不一致;
3. bean的生命周期
- 通过无参构造创建对象;
- 通过set给成员变量赋值;
- 初始化其指定方法,init_method;
- 获取bean,进行使用;
- 容器关闭的时候执行销毁方法,destroy_method;
4. BeanPostProcessor可在初始化方法执行前或后执行,需要注入spring容器中
- 通过无参构造创建对象;
- 通过set给成员变量赋值;
- BeanPostProcessor前置执行;
- 初始化其指定方法,init_method;
- BeanPostProcessor后置执行;
- 获取bean,进行使用;
- 容器关闭的时候执行销毁方法,destroy_method;
5. @autowire根据类型进行注入,可结合@qualifier 结合名称进行注入,@resource即可根据类型也可根据名称注入(name = '名称'),@value注入普通类型
AOP
- 默认使用JDK代理(基于源码的代理);
- 没有接口的情况下,使用CGLIB基于字节码的代理;
- 连接点:可被增强的方法;
- 切入点:实际被增强的方法;
- 通知:增强的逻辑;
事务
- 分成声明式事务(常用)和编程式事务;
- 声明式事务基于AOP进行实现;
- 事务特性ACID都是为了C;
- 事务传播机制:多事务方法直接进行调用,默认REQUIRED:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中;
- 事务隔离级别:针对多个事务
5.1 不考虑隔离性,会产生脏读,不可重复读,虚读
5.1.1 脏读:一个未提交事务,读取另一个未提交的事务;
5.1.2 不可重复读:一个未提交的事务读取到另一个已提交的事务中修改的数据;
5.1.3 虚读:一个未提交的事务读取到另一个已提交事务中的新增数据;
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | V | V | V |
读已提交 | X | V | V |
重复读 | X | X | V |
串行化 | X | X | X |
Spring5新功能
- 支持@nullable 用在方法上,返回值可以为空;用在属性上,属性可以为空,用在方法参数上,方法参数可以为空;
- 函数式创建对象交给容器管理GenericApplicationContext;
WebFlux 异步非阻塞框架,建议用在网关
- 同步与异步:调用者发送请求,等待响应再做其他就是同步;不等待响应做其他就是异步;
- 阻塞与非阻塞:被调用者收到请求,做完请求再给出反馈,就是阻塞;立马给出反馈再去做就是异步;
- springMVC是同步阻塞,基于springMVC+servlet+tomcat;springWebflux是异步非阻塞,基于springWebflux+reactor+netty;