java框架学习——Spring AOP相关功能详细

Spring AOP相关详细

spring中基于xml的AOP配置步骤

 1.把通知Bean也交给spring来管理
 2.使用aop:config标签表明开始AOP的配置
 3.使用aop:aspect标签表明配置切面,id属性是给切面提供一个唯一标识,ref属性指定通知类bean的id
 4.在aop:aspect标签内部使用对应标签来配置通知的类型,aop:before表示配置前置通知,method属性用于指定
    Logger类中那个方法是前置通知。pointcut属性:用于指定切入点表达式,指的是对业务层中那些方法增强。
    切入点表达式的写法:关键字:execution表达式,访问修饰符 返回值 包名.类名.方法名(参数名)
    访问修饰符可以省略,返回值可以使用通配符表示可以返回任意值,包名可以使用通配符表示任意包,但是有几级包
    就需要写几个*,包名可以 使用..表示当前包及其子包。
    类名和方法名都可以使用*来实现通配
    参数列表可以直接写数据类型:基本数据类型直接写名称,引用类型写包名.类名的方式,可以使用通配符表示任意类型
    但是必须有参数。可以使用..表示有无参数均可,有参数可以是任意类型。
    全通配写法:* *..*.*(..)
    实际开发中切入点表达式的通常写法:切到业务层实现类下的所有方法 * com.lut.service.impl.*.*(..)

1.配置切入点
配置切入点表达式,id属性用于指定表达式的唯一标识,expression用于指定表达式内容
此标签写在aop:aspect标签内部只能当作切面使用
它还可以写在aop:aspect外面,此时就变成了所有切面可用
注意必须写在aspect之前
环绕通知:

/*
    * 环绕通知
    * 问题:当我们配置了环绕通知之后,切入点方法没有执行,而通知方法执行了
    * 通过对比动态代理中的环绕通知代码,发现动态代理的环绕通知有明确的切入点方法调用
    * 解决:Spring框架中提供了一个接口,ProceedingJoinPoint该接口有一个方法proceed()此方法相当于
    * 明确调用切入点方法,该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供
    * 该接口的实现类供我们使用
    *
    * spring环绕通知spring框架提供的一种在代码中手动控制增强方法何时执行的方式
    * */
   <!--配置切面-->
    <aop:aspect id="logAdvice" ref="logger">
        <!--配置前置通知:在切入点方法执行之前执行-->
        <aop:before method="beforePrintLog" pointcut-ref="pt1"></aop:before>
        <!--配置后置通知:在切入点方法正常执行之后执行,和异常通知只能执行一个-->
        <aop:after-returning method="afterReturningPrintLog"  pointcut-ref="pt1"></aop:after-returning>
        <!--配置异常通知:在切入点方法执行产生异常之后执行,和后置通知只能执行一个-->
        <aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt1" ></aop:after-throwing>
        <!--配置最终通知:无论切入点方法时候正常执行它都会在其后面执行-->
        <aop:after method="afterPrintLog"  pointcut-ref="pt1"></aop:after>
        配置环绕通知 详细注释在Logger类中
        <aop:around method="aroundPrintLog" pointcut-ref="pt1"></aop:around>
    </aop:aspect> 

2.jdbcTemplate最基本用法

//准备数据源:spring内置数据源
        DriverManagerDataSource ds=new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring?serverTimezone=UTC");
        ds.setUsername("root");
        ds.setPassword("123456");

        //1创建jdbcTemplate对象
        JdbcTemplate jt=new JdbcTemplate();
        //给jdbcTemplate设置数据源
        jt.setDataSource(ds);
        //2执行操作
        jt.execute("insert into student(name,major) values ('ccc',computer)");

3.spring中基于xml的声明式事务控制配置步骤

 1配置事务管理器
    2.配置事务的通知:导入事务的约束,使用tx:advice标签配置事务通知,属性:id给事务通知一个唯一标识,
            transaction-manager:给事务通知提供一个事务管理器引用
    3.配置AOP中的同用切入点表达式
    4.建立事务通知和切入点表达式的对应关系
    5.配置事务的属性:实在事务的通知tx:advice标签的内部
            isolation="指定事务的隔离级别默认default表示使用数据库的默认隔离级别"
             no-rollback-for="用于指定一个异常,当产生该异常时事务不回滚,产生其他异常时事务回滚,没有默认值表示都回滚"
              rollback-for="用于指定一个异常产生时事务回滚,产生其他异常时事务回滚,没有默认值,表示
             任何异常都回滚"
             propagation="用于指定事务的传播行为,默认是REQUIRED 表示一定有事务,增删改的选择,查询可以选择SUPPORTS"
             read-only="指定事务是否只读,查询方法才能设置为true,默认值false"
             timeout="用于指定事务的超时时间,默认值-1,表示永不超时,如果指定数值以秒为单位"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值