Spring之AOPxml开发

AOP之XML开发

技术:动态代理技术
作用:将动态代理重复代码抽取出来,减少重复代码、提高开发效率 、降低维护难度
典型应用:事务管理

概念含义
pointcut(切点)对哪些方法进行拦截
advice(通知)对拦截方法增强方法
weaving(织入)把通知放入增强对象以建立动态代理
aspect(切面)通知+切点
proxy(代理类)aop织入后产生一个代理类
切面= 通知+切点

引入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>     <artifactId>aspectjweaver</artifactId>
    <version>1.8.7</version>
</dependency>

通知类

public class TongZhi {
   
  
    public void before(){//切面执行前执行
        System.out.println("前置通知");
    }
   
    public void afterReturn(){//切面返回结果之前执行,它和异常通知只能执行一个
        System.out.println("后置通知");
    }
   
    public void exception(Exception e){//出现异常,执行
        System.out.println("异常通知"+e);
    }
   
    public void after(){//切面执行后执行,一定会执行
        System.out.println("最终通知");
    }
 //ProceedingJoinPoint 可以执行切点方法
    public void around(ProceedingJoinPoint joinPoint){//环绕通知
        before();//以上的加和
        try {
            joinPoint.proceed();
            afterReturn();
        } catch (Throwable throwable) {
            throwable.printStackTrace();

        }
        after();
    }
}

通知类编写完以后,在配置文件中配置切面

<!-- aop配置   -->
    <aop:config>
<!-- 配置切面  ref 引用通知类     -->
        <aop:aspect ref="tongzhi">
<!--  配置切点-->
            <aop:pointcut id="incepter" expression="execution(* cn.itcast..*.*(..))"/>
<!--  通知织入切点  -->
<!-- 前置通知    -->
            <aop:before method="before" pointcut-ref="incepter"></aop:before>
<!-- 后置通知    -->
            <aop:after-returning method="afterReturn" pointcut-ref="incepter"></aop:after-returning>
<!-- 异常通知    -->           
            <aop:after-throwing throwing="e" method="exception" pointcut-ref="incepter"></aop:after-throwing>
<!-- 最终通知   -->          
            <aop:after method="after" pointcut-ref="incepter"></aop:after>
<!-- 环绕通知    -->
            <aop:around method="around"  pointcut-ref="incepter"></aop:around>
        </aop:aspect>
    </aop:config>

需要注意的是:对象执行切点方法时,按照织入方式执行通知。隐含条件:该对象必须是从spring容器获取,new 出来的不行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值