Java-基本语法回顾总结[37-48]
- ReentrantLock与synchronized的区别?-√
- 对AQS的理解,AQS如何实现可重入锁-※
- 对IOC的理解
- 单例bean与单例模式
- spring事务传播机制-※
- spring事务什么时候会失效-√
- spring中创建的bean,生命周期有哪些-※
- spring中的bean是线程安全的吗? 如果bean上有状态,就不是线程安全的
- applicationContext和beanFactory有什么区别? beanFatory的功能,applicationContext都有,但applicationContext还有其他功能[获取系统环境变量、事件发布]
- spring中的事务是如何实现的?-※
- @Transactional什么时候会失效?
- spring容器的启动流程是怎样的?-※
含义:ReentrantLock是一个类;synchronized是一个关键字
是否公平:ReentrantLock可以加公平锁,也可以加非公平锁;synchronized只能是非公平锁。
synchronized自动加锁释放锁,ReentrantLock需要手动加锁释放锁
synchronized是JVM层面的锁,ReentrantLock是API层面的锁
AQS是一个用于JAVA线程同步的框架。
AQS内部维护了一个状态变量state和一个线程双向队列。
在可重入锁的场景下,state表示加锁次数,当state减少至0时,代表持有锁的线程释放锁了,就唤醒下一个线程竞争锁。
inverse of control,控制翻转,将bean的生成交给spring管理,例如,@autowired自动装配的mapper层对象。
好处:单例bean可以有效复用,减少对象生成的时间成本。各种bean还有自身的应用场景。
spring自动装配出来的对象全都会指向同一个单例bean,不强制约束用户不可创建第二个对象。
单例模式针对的是类而言的,如果某个类应用了单例模式,那么这个类就不可能创建出第二个对象,所有该类的引用都会指向同一个对象,不管是spring自动装配还是用户自己new。
数据库:数据库如果不支持事务,那么spring事务就会失效
Java:
类:事务所在类没有对应的注解,spring没有在容器里面生成该类的bean[类上面没有component之类的注解]
方法:方法上没有加上事务注解或者方法的权限修饰符不是public
调用:调用方法没有使用代理对象,而是通过原对象调用的方法。[自己new]
1.推断构造方法
2.实例化
3.依赖注入[构造方法可能需要部分外部注入属性;成员变量中依赖于其他类,等等多种需要将其他实例注入的情况]
4.处理@postConstruct注解,构造之后还可以执行的自定义处理
5.处理initializingBean接口复写内容,如果实现了该接口的话[前面就是bean的实例化,这一步就是bean的初始化,这就是两者的区别]
6.生成代理对象,最后生成bean
如果bean上没有状态,就是线程安全的
类:事务所在类没有对应的注解,spring没有在容器里面生成该类的bean
方法:方法上没有加上事务注解或者方法的权限修饰符不是公共的
调用:调用方法没有使用代理对象,而是通过原对象调用的方法。
1.扫描所有beanDefinition对象,并保存至map
2.筛选出单例bean进行bean创建,推断构造方法-实例化-依赖注入-postConstruct注解-beanInition接口复写方法-生成代理对象-生成bean
3.applicationContext发布spring容器启动事件