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

一. 通知类型

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方法)还是中断执行。 

猜你喜欢

转载自www.cnblogs.com/jj1106/p/11681922.html