Spring Bean类型和使用Bean时被依赖Bean的注入时机

  1. Bean Scope定义:Singleton, Prototype, Session, GlobalSession, Request
  2. 被依赖的Bean的注入时机

    1. 当前Bean为Singleton,被依赖的Bean为Singleton类型时,注入发生在实例化后,初始化时,两个Bean会被缓存起来,一直不变。
    2. 当前Bean为 Prototype时,在通过getBean函数获取当前Bean时,当前Bean初始化,在通过getBean获取被依赖的Bean,被依赖的Bena如果为Singleton类型,则bean在缓存,直接取即可,为其他类型时,根据需要进行实例化和初始化,或者取缓存。

      Spring 事务

  3. 传播行为

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