Spring管理事务

Spring管理事务

      PlatformTransactionManager 帮助我们管理仁义平台的事务。

       Hibernate  HinernateTransactionManager

        事务:(4大特征)

    1.一致性

   2.原子性

    3.持久性

   4. 隔离性


  事务安全:

 事务线程安全:脏读 、不可重复读、  幻读、读为提交

  隔离级别:  1  2 4 (读已提交) 8


    所有事务的操作有三步:

      开启事务

      提交事务

      回滚事务

    spring管理事务利用的是spring aop思维,将事务的操作织入到目标对象中。



 Spring 管理事务的属性:

    隔离级别  是否只读  事务的传播行为(7钟)




  Spring 管理事务的三种方式:


  (1)代码式

         1).配置事务管理对象

          2).配置事务管理的模块

           3).在service中注入模块对象,然后调用execute方法

package cn.hd.spring_transaction.impl;

import cn.hd.spring_transaction.UserDao;
import cn.hd.spring_transaction.UserService;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

import javax.annotation.Resource;

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    @Resource(name = "transactionTemplate")
    private TransactionTemplate tt;

    public void setTt(TransactionTemplate tt) {
        this.tt = tt;
    }

    @Override
    public void transform(Integer form, Integer to, Integer money) {
            /*TransactionCallbackWithoutResult()没有任何返回值的回调函数*/
            tt.execute(new TransactionCallbackWithoutResult() {
                @Override
                protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                    userDao.increase(to,money);
                    int i = 1/0;
                    userDao.decrease(form,money);
                }
            });
    }
}

      2.xml配置

         1).有一个事务管理对象

<bean name="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

        2)。配置事务的通知

               标签名tx:advice   id 给当前的事务起个标号

              Transact ....配置刚刚的事务管理对象

             配置参数 :methor name 可以式具体某个方法(方法名)比较麻烦,可以通过通配符的

             方式去配置

          add*delete*update*get                  persist*remove*modify*find*

              要求你的service命名必须规范。

              isolation:隔离级别使用默认即可

             propagation:事务传播行为required

            read-only:是否只读如果查找true   否则为false

<!--配置事务通知-->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
    <!--事务的属性-->
    <tx:attributes>
        <!--给那个方法添加事务;隔离:默认(级别4);传播行为:如果事物存在运行,不存在新建;是否只读-->
        <tx:method name="transform" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="get*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
        <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
        <tx:method name="persist*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="modify*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
        <tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
    </tx:attributes>
</tx:advice>

 3.将通知织入到目标对象

  

<!--将通知织入到目标对象-->
<aop:config>
    <!--切点-->
    <aop:pointcut id="txPc" expression="execution(* cn.hd.spring_transaction..impl.*ServiceImpl.*(..))"></aop:pointcut>
    <!--切面-->
    <aop:advisor advice-ref="myAdvice" pointcut-ref="txPc"></aop:advisor>
</aop:config>
                           
  配置切面不再使用aop:aspect,而是aop:advisor

   3.注解配置

    1.开启注释模式

 

<!--开启注解模式-->

<tx:annotation-driven></tx:annotation-driven>

2.在你想设置的事务的地方

	@Transactional(isolation = Isolation.DEFAULT,propagation = 
Propagation.REQUIRED,readOnly = false)

可以有两个位置

   1)类上面,该类中所有方法都会使用以上的参数事务

     2)方法名上面,该方法使用参数中的事务

           如果两个都设置以方法名上面的事务为准

在电子设计自动化(EDA)领域,Verilog HDL 是一种重要的硬件描述语言,广泛应用于数字系统的设计,尤其是在嵌入式系统、FPGA 设计以及数字电路教学中。本文将探讨如何利用 Verilog HDL 实现一个 16×16 点阵字符显示功能。16×16 点阵显示器由 16 行和 16 列的像素组成,共需 256 个二进制位来控制每个像素的亮灭,常用于简单字符或图形显示。 要实现这一功能,首先需要掌握基本的逻辑门(如与门、或门、非门、与非门、或非门等)和组合逻辑电路,以及寄存器和计数器等时序逻辑电路。设计的核心是构建一个模块,该模块接收字符输入(如 ASCII 码),将其转换为 16×16 的二进制位流,进而驱动点阵的 LED 灯。具体而言,该模块包含以下部分:一是输入接口,通常为 8 位的 ASCII 码输入,用于指定要显示的字符;二是内部存储,用于存储字符对应的 16×16 点阵数据,可采用寄存器或分布式 RAM 实现;三是行列驱动逻辑,将点阵数据转换为驱动 LED 矩阵的信号,包含 16 个行输出线和 16 个列使能信号,按特定顺序选通点亮对应 LED;四是时序控制,通过计数器逐行扫描,按顺序控制每行点亮;五是复用逻辑(可选),若点阵支持多颜色或亮度等级,则需额外逻辑控制像素状态。 设计过程中,需用 Verilog 代码描述上述逻辑,并借助仿真工具验证功能,确保能正确将输入字符转换为点阵显示。之后将设计综合到目标 FPGA 架构,通过配置 FPGA 实现硬件功能。实际项目中,“led_lattice”文件可能包含 Verilog 源代码、测试平台文件、配置文件及仿真结果。其中,测试平台用于模拟输入、检查输出,验证设计正确性。掌握 Verilog HDL 实现 16×16 点阵字符显示,涉及硬件描述语言基础、数字逻辑设计、字符编码和 FPGA 编程等多方面知识,是学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值