Spring Bean类型和使用Bean时被依赖Bean的注入时机
- Bean Scope定义:Singleton, Prototype, Session, GlobalSession, Request
被依赖的Bean的注入时机
传播行为
- TransactionDefinition.PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务,则加入到这个事务中。这是最常见的选择。
- TransactionDefinition.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
- TransactionDefinition.PROPAGATION_MANDATORY:表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常
- TransactionDefinition.PROPAGATION_REQUIRED_NEW:表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED:表示该方法不应该运行在事务中。如果当前存在事务,就把当前事务挂起。
- TransactionDefinition.PROPAGATION_NEVER:表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常
- TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
- 事务隔离规则
- TransactionDefinition.ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
- TransactionDefinition.ISOLATION_READ_UNCOMMITTED:允许读取尚未提交的数据变更(最低的隔离级别)
- TransactionDefinition.ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据
- TransactionDefinition.ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改
- TransactionDefinition.ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的
- 动态代理原理
- 数据库索引失效
- 查询条件使用不等式
- 查询条件类型不一致
- 查询条件使用函数计算
- 模糊查询查询条件前缀模糊不会走索引
- 查询条件不使用复合索引的首列,均会导致索引失效
