创建对象, 有几种方式:
1) 调用无参数构造器
2) 带参数构造器
3) 工厂创建对象
工厂类,静态方法创建对象
工厂类,非静态方法创建对象
Spring 事物控制 编程式事务控制
自己手动控制事务,就叫做编程式事务控制。
Jdbc 代码:
Conn.setAutoCommite(false); // 设置手动控制事务
Hibernate 代码:
Session.beginTransaction(); // 开启一个事务
【细粒度的事务控制: 可以对指定的方法、指定的方法的某几行添加事务控制】 (比较灵活,但开发起来比较繁琐: 每次都要开启、提交、回滚.)
声明式事务控制
Spring 提供了对事务的管理, 这个就叫声明式事务管理。
Spring 声明事物有 xml 方式和注解方式
Spring 提供了对事务控制的实现。用户如果想用 Spring 的声明式事务管理,只需要在配 置文件中配置即可; 不想使用时直接移除配置。这个实现了对事务控制的最大程度的解耦。
Spring 声明式事务管理,核心实现就是基于 Aop。
【粗粒度的事务控制: 只能给整个方法应用事务,不可以对方法的某几行应用事务。】 (因为 aop 拦截的是方法。)
Spring 声明式事务管理器类:
Jdbc 技术:DataSourceTransactionManager
Hibernate 技术:HibernateTransactionManager
Spring 事物传播行为
Spring 中事务的定义:
Propagation(key 属性确定代理应该给哪个方法增加事务行为。这样的属性最重 要的部份是传播行为。)有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建 一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。