基于AOP的声明式事物控制

目录

Spring事务编程概述

基于xml声明式事务控制

事务属性

isolation

timeout

read-only

propagation

全注解开发


Spring事务编程概述

事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化

 基于AOP的声明式事物控制_第1张图片

 基于AOP的声明式事物控制_第2张图片

基于xml声明式事务控制

结合上面学习的AOP技术,我们可以对Service的方法进行事务的增强

  • 目标类:自定义的AccountServiceImpl,内部方法是切点

  • 通知类:Spring提供的,通知方法已经定义好的,只需配置

 步骤:

        1.导入Spring事务的相关的坐标

基于AOP的声明式事物控制_第3张图片

         2.配置目标类AccountServiceImpl

         3.使用advisor标签配置切面

 (为什么用advisor标签配置切面?)

假设使用aspect的话需要一个通知类,一级配置一系列通知方法标签

而advisor只需要实现接口重写方法就可以,配置简单


    

    



    
        
    

    
        
    

    
        
        
        
        
    

    
        
    

    
        
            
        
    

    

        
        
    

其中有注释可以了解一下 


    
        




            
            
        
    
事务属性

这个补充一下事务属性

isolation

基于AOP的声明式事物控制_第4张图片

timeout

超时时间,默认为-1(没有超时时间) 单位:秒(s)

read-only

是否只读,查询操作才只读,其他默认

propagation

事务传播行为,解决业务方法调用业务方法(事务嵌套问题)

基于AOP的声明式事物控制_第5张图片

全注解开发

@Configuration
@ComponentScan(basePackages = {"com.xfy"})
@MapperScan(basePackages = {"com.xfy.mapper"})
@PropertySource("classpath:jdbc.properties")
@EnableTransactionManagement//事务自动管理
public class SpringConfig {
    @Bean
    public DataSource dataSource(
           @Value("${jdbc.driver}") String driver,
           @Value("${jdbc.url}") String url,
           @Value("${jdbc.username}") String username,
           @Value("${jdbc.password}") String  password
    ){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return  dataSource;
    }
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return  sqlSessionFactoryBean;
    }
    @Bean
    public DataSourceTransactionManager  transactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return  dataSourceTransactionManager;
    }
}

你可能感兴趣的:(Spring,java,spring)