Notas de estudio 5 del SSM (control declarativo de transacciones)

Control declarativo de transacciones

1. Objetos relacionados con el control de transacciones mediante programación

1.1 PlatformTransactionManager

La interfaz PlatformTransactionManager es el administrador de transacciones de Spring, que proporciona los métodos que usamos comúnmente para manipular transacciones.

Inserte la descripción de la imagen aquí

Nota:

PlatformTransactionManager es un tipo de interfaz, y las diferentes tecnologías de capa de Dao tienen diferentes clases de implementación. Por ejemplo, cuando la tecnología de capa de Dao es jdbc o mybatis: org.springframework.jdbc.datasource.DataSourceTransactionManager

Cuando la tecnología de la capa de Dao está en hibernación: org.springframework.orm.hibernate5.HibernateTransactionManager

1.2 Definición de transacción

TransactionDefinition es el objeto de información de definición de la transacción, que tiene los siguientes métodos:
Inserte la descripción de la imagen aquí

2 control de transacciones declarativas basado en XML

2.1 ¿Qué es el control declarativo de transacciones?

La transacción declarativa de Spring, como su nombre indica, es utilizar un enfoque declarativo para manejar transacciones. La declaración mencionada aquí se refiere a la declaración en el archivo de configuración, y el procesamiento de transacciones declarativas en el archivo de configuración de Spring se usa en lugar de la transacción de procesamiento de código.

El papel del procesamiento de transacciones declarativas

  • La gestión de transacciones no invade los componentes desarrollados. Específicamente, los objetos de lógica empresarial no se darán cuenta de que están en la gestión de transacciones, y de hecho deberían estarlo, porque la gestión de transacciones es un servicio a nivel del sistema, no parte de la lógica empresarial. Si desea cambiar el plan de gestión de transacciones, solo debe necesita reconfigurar en el archivo de definición

  • Cuando no se requiere la administración de transacciones, puede eliminar el servicio de administración de transacciones siempre que modifique el archivo de configuración sin cambiar el código y volver a compilar, lo cual es extremadamente conveniente de mantener

Nota: La capa inferior del control de transacciones declarativas de Spring es AOP.

2.2 Implementación del control declarativo de transacciones

El control declarativo de transacciones es una cuestión clara:

  • ¿Quién es el punto de corte?

  • ¿Quién es la notificación?

  • ¿Aspecto de configuración?

  • ①Introducir el espacio de nombres tx

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">


②Mejora de transacciones de configuración

<!--平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!--事务增强配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

③Transacción de configuración AOP weaving

<!--事务的aop增强-->
<aop:config>
    <aop:pointcut id="myPointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
</aop:config>

④Código comercial de transferencia de control de transacciones de prueba

@Override
public void transfer(String outMan, String inMan, double money) {
    
    
    accountDao.out(outMan,money);
    int i = 1/0;
    accountDao.in(inMan,money);
}

3 Control de transacciones declarativas basado en anotaciones

3.1 Usar anotaciones para configurar el control declarativo de transacciones

  1. Escribir AccoutDao
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
    
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void out(String outMan, double money) {
    
    
        jdbcTemplate.update("update account set money=money-? where name=?",money,outMan);
    }
    public void in(String inMan, double money) {
    
    
        jdbcTemplate.update("update account set money=money+? where name=?",money,inMan);
    }
}
  1. Escribir AccoutService
@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {
    
    
    @Autowired
    private AccountDao accountDao;
    @Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
    public void transfer(String outMan, String inMan, double money) {
    
    
        accountDao.out(outMan,money);
        int i = 1/0;
        accountDao.in(inMan,money);
    }
}
  1. Escribir el archivo de configuración applicationContext.xml
<!—之前省略datsSource、jdbcTemplate、平台事务管理器的配置-->
<!--组件扫描-->
<context:component-scan base-package="com.itheima"/>
<!--事务的注解驱动-->
<tx:annotation-driven/>

3.2 Análisis de control de transacciones declarativo de configuración de anotaciones

①Utilice @Transactional para modificar las clases o métodos que necesitan control de transacciones. Los atributos disponibles para las anotaciones son los mismos que los métodos de configuración xml, como nivel de aislamiento, comportamiento de propagación, etc.

②La anotación se usa en la clase, luego todos los métodos de la clase usan el mismo conjunto de configuración de parámetros de anotación.

③En términos de métodos, diferentes métodos pueden usar diferentes configuraciones de parámetros de transacción.

④La unidad de anotación de la transacción que se abrirá en el archivo de configuración Xml <tx: annotation-drive />

3.3 Puntos de conocimiento

Puntos clave de configuración para el control declarativo de transacciones

  • Configuración del administrador de transacciones de la plataforma (modo xml)

  • Configuración de notificación de transacciones (@Configuración de anotaciones transaccionales)

  • Configuración basada en anotaciones de transacciones tx: basada en anotaciones /

Supongo que te gusta

Origin blog.csdn.net/weixin_45394002/article/details/113176414
Recomendado
Clasificación