一. 通知类型
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======="); } }
目标类
接口(便于扩张)
public interface MyTarget { public void update(); }
接口实现类
public class MyTargetImpl implements MyTarget { @Override public void update() { System.out.println("=====update======"); } }
配置文件(一般是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方法)还是中断执行。
原文地址:https://www.cnblogs.com/jj1106/p/11681922.html
时间: 2024-11-08 10:26:52