Spring
2021-12-07 15:01:05 0 举报
AI智能生成
登录查看完整内容
Spirng总结
作者其他创作
大纲/内容
Spring
IOC
依赖注入,控制反转
先来看下传统的实现
需要自己new N多的实现类
一旦有改动,特别麻烦。如果有几十处这样的地方,那对测试和开发来说都挺头疼的
ioc是如何优化这个流程的
通过@Resource注解注入一个接口MyService,不需要new实现类
在MyServiceImpl上加一个@Service注解
将接口与实现类的绑定交给spring容器
以前是通过xml配置,现在比较方便,直接给注解就行了
即把对象的管理交给spring容器
AOP
面向切面编程
以事务为例
实际上是通过代理,来进行方法的加强
一般情况下是走jdk默认的动态代理
适用于有实现类的接口
简单的可以认为jdk动态代理是基于接口实现的
cglib
在没有实现类接口的情况下,走cglib
简单的可以认为cglib是基于继承的
将重复的代码逻辑放到一个切片里,动态代理的方式实现各个接口逻辑
如何解决循环依赖
简要来说,就是依靠spring的三级缓存来实现的
构造器注入有循环依赖风险
一般建议使用setter方式注入
Bean的生命周期
bean 创建 -> 使用 -> 销毁
1.实例化一个bean :如果要使用这个bean的话
2.依赖注入
bean依赖了谁,也会把依赖对应的bean创建出来
使用构造方法,或者setter进行依赖bean的创建
3.处理Aware接口
4. BeanPostProcessor
有两个方法, before && after
在bean构造好了以后,如果需要对bean进行一些自定义的处理,可以让bean实现这个接口
5.InitializingBean 与 init-method
如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。
6. DisposableBean
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法
7.destroy-method
最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法
创建+初始化一个bean -> spring容器管理的bean长期存活 -> 销毁bean(两个回调函数)
Bean的线程安全
singleton
默认是单例的
不保证安全性
prototype
为每一个bean请求提供一个实例
request
为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收
session
与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效
global-session
事务传播机制
PROPAGATION_REQUIRED
如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置
默认就是这个
PROPAGATION_SUPPORTS
支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行
很少用
PROPAGATION_MANDATORY
支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常
PROPAGATION_REQUIRES_NEW
创建新事务,无论当前存不存在事务,都创建新事务
偶尔会用
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。
Spring boot
核心功能就是自动装配
以前我们spring+springMVC+mybatis那一套需要大量的配置文件,然后还要打包放到Tomcat里运行
Spring boot内嵌了一个Tomcat服务器,并且对你引入的maven包进行自动装配
比如mybatis,只需要引入一个start包,并进行一些简单、必要的配置即可,比如db配置等
事务失效
try - cache了
报错类型不符
子主题
0 条评论
回复 删除
下一页