spring

特性

  • IOC(DI) Inversion of Control 反转控制,将原本是自己所管理的对象让Spring容器来帮自己管理。可以设置Scope属性来配置作用于,单例或多例。DI是依赖注入,当对象依赖其他对象,自己管理是很复杂的,Spring可以完成依赖注入,也就是属性赋值。

  • AOP Aspect Oriented Programming 面向切面编程

    AOP术语:

    • 横切关注点:目标对象的公共方法
    • 切面:封装横切关注点的类
    • 通知:切面的每个方法,其实就是横切关注点,也就是公共方法,只不够是放在另一单独类——切面里叫做通知
    • 目标:被通知的对象,抽取出来的代码,要运行的对象身上
    • 代理:向目标对象发出通知后,所创建的对象。AOP本质上是动态代理模式
    • 连接点:横切关注点在代码中的具体体现,就是公共方法需要在哪里运行,例如日志打印,一般就在方法调用前和方法调用后。

    AOP框架:

    • AspectJ
    • Spring AOP

事务

在spring的配置文件中开始事务注解功能

1
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>

使用@Transactional作用在方法或类上

@Transactional的属性

  • transactionManager 指定事务管理器是哪一个,多个数据源的时候需要指定
  • propagation 事务的传播行为,默认是REQUIRED

    • REQUIRED :当A存在事务,调用B方法,B也存在事务,则B使用A的事务。否则B就开启一个事务并在自己的事务中运行
    • REQUIRES_NEW: A调用B,不管A是否有事务,B都开始新事务,并且运行自己的事务。如果A有事务在运行,将他挂起
    • SUPPORTS: 当A存在事务,调用B方法,B也存在事务,则B使用A的事务。否则B可以不开启事务
    • NOT_SUPPORTED: 当前方法不应该运行在事务中,如果有事务在运行,就将它挂起
    • MANDATORY: 当前方法必须运行在事务中,如果没有事务在运行,抛出异常
    • NEVER: 当前方法不允许运行在事务中,否则抛出异常
  • isolation 隔离级别

    • READ_UNCOMMITTED:读未提交,会造成脏读
    • READ_COMMITTED:读已提交,只能读已经提交事务的记录,会造成不可重复读,当一个事务在读时,另一个事物进行修改操作并提交,事务在第二次读的时候就会发现数据不一致,导致不可重复读。
    • REPEATABLE_READ:可重复读,会造成幻读,在开始读取数据(事务开启)时,不再允许修改操作。但是可以进行插入操作,导致幻读。
    • SERIALIZABLE:串行化,单线程操作,性能低,消耗大
    • DEFAULT:默认与数据库的隔离级别是一致的
  • timeout:在事务的强制回滚前,可以等待的时间

  • readOnly:指定当前事务中的一系列操作为只读,通知数据库为读操作,不用加锁,提高效率,如果事务中有写的操作,会出现脏读,幻读,不可重复读

  • rollbackfor:针对那些异常进行回滚