Notas de estudo 5 do SSM (controle de transação declarativa)

Controle de transação declarativa

1. Objetos relacionados ao controle de transação programática

1.1 PlatformTransactionManager

A interface PlatformTransactionManager é o gerenciador de transações do spring, que fornece os métodos que normalmente usamos para manipular transações.

Insira a descrição da imagem aqui

Nota:

PlatformTransactionManager é um tipo de interface e diferentes tecnologias da camada Dao têm classes de implementação diferentes. Por exemplo, quando a tecnologia da camada Dao é jdbc ou mybatis: org.springframework.jdbc.datasource.DataSourceTransactionManager

Quando a tecnologia da camada Dao está em hibernação: org.springframework.orm.hibernate5.HibernateTransactionManager

1.2 TransactionDefinition

TransactionDefinition é o objeto de informações de definição da transação, que possui os seguintes métodos:
Insira a descrição da imagem aqui

2 Controle de transação declarativa baseado em XML

2.1 O que é controle de transação declarativa

A transação declarativa do Spring, como seu nome sugere, é usar uma abordagem declarativa para lidar com as transações. A declaração mencionada aqui se refere à declaração no arquivo de configuração, e o processamento de transação declarativa no arquivo de configuração Spring é usado em vez da transação de processamento de código.

A função do processamento de transações declarativas

  • O gerenciamento de transações não invade os componentes desenvolvidos. Especificamente, os objetos de lógica de negócios não perceberão que estão no gerenciamento de transações, e de fato deveriam, porque o gerenciamento de transações é um serviço de nível de sistema, não parte da lógica de negócios. Se você deseja alterar o plano de gerenciamento de transações, você apenas precisa reconfigurar no arquivo de definição

  • Quando o gerenciamento de transações não é necessário, você pode remover o serviço de gerenciamento de transações, desde que modifique o arquivo de configuração sem alterar o código e recompilar, o que é extremamente conveniente de manter

Nota: A camada inferior do controle de transação declarativa do Spring é AOP.

2.2 Implementação de controle de transação declarativa

Questões claras de controle de transação declarativa:

  • Quem é o ponto de corte?

  • Quem é a notificação?

  • Aspecto de configuração?

  • ①Introduzir o namespace 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">


② Aprimoramento de transação de configuração

<!--平台事务管理器-->
<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>

③ Transação de configuração AOP entrelaçada

<!--事务的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>

④ Testar o código comercial de transferência de controle de transação

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

3 Controle de transação declarativa baseado em anotação

3.1 Use anotações para configurar o controle de transação declarativa

  1. Escreva 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. Escreva 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. Grave o arquivo de configuração applicationContext.xml
<!—之前省略datsSource、jdbcTemplate、平台事务管理器的配置-->
<!--组件扫描-->
<context:component-scan base-package="com.itheima"/>
<!--事务的注解驱动-->
<tx:annotation-driven/>

3.2 Análise de controle de transação declarativa de configuração de anotação

① Use @Transactional para modificar as classes ou métodos que precisam de controle de transação. Os atributos disponíveis para anotações são os mesmos dos métodos de configuração xml, como nível de isolamento, comportamento de propagação, etc.

②A anotação é usada na classe, então todos os métodos da classe usam o mesmo conjunto de configuração de parâmetro de anotação.

③Em termos de métodos, métodos diferentes podem usar configurações de parâmetros de transação diferentes.

④ A unidade de anotação da transação a ser aberta no arquivo de configuração Xml <tx: annotation-driven />

3.3 Pontos de Conhecimento

Pontos-chave de configuração para controle de transação declarativa

  • Configuração do gerenciador de transações da plataforma (modo xml)

  • Configuração de notificação de transação (configuração de anotação @Transactional)

  • Tx de configuração orientado a anotações de transação: orientado a anotações /

Acho que você gosta

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