java入门->Sprng事物管理, 面向切面AOP

事物

    数据库:commit 提交;rollback 撤销;

    JDBC:stat.executeUpdate()默认自动commit提交;

try{
    con.setAutoCommit(false)://关闭自动提交
    stat.executaUpdate(sql1);
    stat.executeUpdate(sql2);
    conn.commit();//提交
}catch(){
    con.rollback; //撤销
}

    事物:将一组和sql有关的操作,封装成一个整体;

        MyBatis:封装了JDBC使用,sqlSession.commit();

        spring+JDBC/spring+MyBatis

        默认自动commit;默认一个操作就是一个独立事务;如果需要封装一组操作,可以采用下面的方法;

       ## spring事务管理(声明式事务管理,注解配置)

        特点:简单,方便,不需要修改原有业务逻辑代码;

        使用方法:*.do——>controller——>service(使用事务)——>Dao——>db操作

                        在spring容器声明一个Bean(DataSoureTransactionManager);

                        开启事务注解标记@Transactional

                        在service方法前或类前添加@Transactional标记即可;

       ##  spring事务管理(声明事务管理:xml配置)

        特点:基于AOP配置,xml配置比注解复杂,侵入性低;

        使用方法:在spring配置一个<bean> (DataSourceTransactionMapper)

                          定义<tx:advice>:指定事务作用在哪些方法上;

                          定义<aop:config>:指定事务作用在哪些组件上;

        ## spring事务管理(编程式事务管理,基于java)

        ## spring事务属性控制;       

Spring AOP概念

    Aspect Oriented Programming 面向切面编程;

    Object Oriented Programming 面向对象编程;

    面向切面编程式以面向对象为基础

    面向对象关注的是对象设计;面向切面关注的是切面;

    切面特点:共通性(执行功能相同,时机相同),适合解决共通处理问题:

                     eg:事务处理,日志处理,异常处理,权限处理;

     AOP优点:将原有的业务中共通的处理逻辑抽离出来,进行独立封装,然后通过配置作用到原有传统的业务处理

                       方法上。

    简称:将共通业务和传统业务进行解耦,可以避免对大量组件方法做代码级别的修改;

    切面(Aspect):在共通时机执行的共通功能,封装了共通处理;

    切入点:指定目标组件及其方法,将来执行时调用切面的共通处理;

    spring是通过一系列表达式是定切面目标:

        方法限定表达式:

            execution(修饰符?返回类型  方法名(参数) 抛出异常?)

                //匹配所有以load开头的方法:execution(* load*(....));

                //匹配org.service包下所有类的load开头的方法:execution(*org.service.*.load(...));

                //匹配org.service包下所有类所有方法:execution(*org.service.*.*(...));

                //匹配org.service包及子包下所有类所有方法:execution(*org.service.*/*(....));

        类型限定表达式:

            //匹配UserService所有方法:withion(oeg.service.UserService)  withion(org.service.*);

            //匹配org.service包及其子包下所有类所有方法:within(org.service..*)

        bean(ID名)

            //匹配id=userService组件的所有方法   bean("userService");

           //匹配id以service结尾的所有方法 bean("*servvice");

    通知(Advice)(什么位置切入)

        指定切面和目标组件方法执行的时机;

        spring提供了5种基本通知类型

            前置通知:在目标方法前调用切面处理;  

            后置通知:在目标方法后调用切面处理(没异常才执行);

            异常通知:在目标方法抛出异常后调用切面处理;

            最终通知:在目标方法后调用切面处理(有无异常都执行);

            环绕通知:在目标方法前和后都可以执行切面处理;

try{
    使用前置通知切入
    ==目标组件方法==
    使用后置通知切入
}catch(){
    使用最终通知切入
}

        ## Spring AOP使用方法

            功能:为每个Controller的execute方法追加打桩信息;

       ## 注解配置方法使用

            开启组件扫描

            开启AOP注解标记

            <aop:aspectj-autoproxy/>

            使用@Aspect,@pointcut,@Before等标记

      ## XML配置方式使用

           方面:打桩;

           切入点:within(org,tedu,cloudnote.controller.*) 

           通知:在execute原有方法之前配置通知配置;

    ## spring AOP实现原理

            AutoProxy动态代理

            spring Aop是采用动态代理技术实现的

            动态代理技术,可以根据现有一个组件,动态生成一个新组件;

            spring如果为某个目标切入了Aop功能后,spring容器会采用动态代理技术生成一个新组件对象返回,并且在

             新组件中将原有组件的业务方法执行了重写,在重写方法里实现了切面组件功能和原目标组件功能的合并;

           Controller——>动态代理类(重写userservice方法,调用DataSourceTransaction Manager和UserServiceImpl

            方法处理)——>UserServiceImpl(Aop切入事务);

            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值