码迷,mamicode.com
首页 > 编程语言 > 详细

零基础学习java------38---------spring中关于通知类型的补充

时间:2019-10-16 00:16:02      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:upd   height   event   执行   inf   完成   click   ext   app   

一. 通知类型

spring aop通知(advice)分成五类: 

(1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。 
(2)正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。 =====>也叫最终通知

案例:

(1)(2)的案例

增强类:

MyAdvice

技术图片
public class MyAdvice {
    public void enhance1() {
        System.out.println("======增强111=======");
    }
    
    public void enhance2() {
        System.out.println("======增强222=======");
    }
}
View Code

目标类

接口(便于扩张)

技术图片
public interface MyTarget {
    
    public void update();
}
View Code

接口实现类

技术图片
public class MyTargetImpl implements MyTarget {

    @Override
    public void update() {
        System.out.println("=====update======");
    }
}
View Code

配置文件(一般是application.xml)

技术图片

 

 

 测试

public class MyTest {
    public static void main(String[] args) {
        // 创建一个容器对象
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/_51doit/AOP2/application.xml");
        MyTarget target = (MyTarget)context.getBean("myTargetImpl");
        target.update();
    }
}

运行结果

技术图片

(3)异常返回通知[After throwing advice]:在连接点抛出异常后执行。 

(4)返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。 

将实现类中写入一个异常,并该下application 如下

接口实现类(写入一个异常)

技术图片

 

 

 application.xml

技术图片

 

 

 运行结果(其他代码与前面一致)

技术图片

 

 

 可见,即使出现异常,此类通知的内容还会被执行

(5)环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。 

 

零基础学习java------38---------spring中关于通知类型的补充

标签:upd   height   event   执行   inf   完成   click   ext   app   

原文地址:https://www.cnblogs.com/jj1106/p/11681922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!