Spring框架中的单例bean是线程安全的吗
不是
Spring框架并没有对单例bean进行任何多线程的封装处理 关于单例bean的线程安全和并发问题 需要开发者自行去确定
通常项目里边使用的springbean都是不可改变的 某种程度上来说 spring单例的bean是线程安全的
如果你的bean有多种状态的话 就需要自行保证线程安全 最简单的办法就是将多态bean有singleton改成prototype
什么AOP
面向切面编程
抽取公共模块 降低耦合 提高代码的复用
一般可以做公共日志保存 事务处理
项目中有没有使用AOP
后台管理系统就是使用aop来记录了系统的操作日志
主要思路是这样的 使用aop 中的环绕通知+切点表达式
Spring中的事务是如何实现的
本质上就是通过aop完成的 对方法前后进行拦截 在执行方法之前开启事务 在执行完目标方法之后 提交或者回滚事务
事务失效的场景
比如方法上异常捕获处理 自己处理了异常 没有抛出 就会导致事务失效 所以一般处理了异常以后 别忘了抛出去
还有如果方法抛出检查异常 如果报错也会导致事务失效
还有如果方法上不是public修饰的 也会导致事务失效
Spring的bean的生命周期
首先BeanDefinition类获取bean的定义信息
里边封装了bean的所有信息 比如类的全路径 是否言辞加载 是否是单例这些
创建bean的时候 第一步 调用构造函数实例化bean
第二步 bean依赖注入
3 处理Aware接口
4 bean的后置处理器
5 初始化方法 实现了接口IntializingBean
6 执行了bean的后置处理器 BeanPostProcessor
最后就是销毁bean
Spring中的循环引用
A依赖于B B依赖于A
循环依赖在Spring是允许存在的 spring框架依据三级缓存已经解决了大部分的循环依赖
构造方法出现了循环依赖
j太多了 先不看了 也不是特别的重点
SpringMVC执行流程
东西居多