AOP切面
环绕通知(Around advice)比较特别,通知的声明和其他一样,但是通知方法的第一个参数必须是ProceedingJoinPoint类型。
Advice parameters XML配置
Advice parameters
Around advice
通知方法的第一个参数必须是ProceedingJoinPoint类型
Around advice,第一个参数必须是ProceedingJoinPoint类型
环绕通知配置
around方法的第一个参数必须是proceedingJoinPoint
Around advice(环绕通知) 是在方法执行的最开始,然后到方法执行末尾但还没有返回的时候执行,切面方法的第一个参数必须ProceedingJoinPoint 类型。调用这个切面方法里的proceed()方法执行被切面的业务方法。切面方法中控制了业务方法的执行。
Advice应用下
Around advice(环绕通知):切面方法的第一个参数必须是ProceedingJoinPoint类型。(并且在这个切面方法里,有一个proceed()方法:当前业务方法的返回值,无论是void类型还是其他类型返回值,都使用Object retVal=pjp.proceed()这种方式,业务方法执行前(这行代码前)业务方法执行后(这行代码后),都可以做我们的切面功能,最后返回retVal对象。)
Around advice案例(配置了环绕通知,抛出异常通知就无效了,因为环绕通知的方法始终有返回值,pjp.proceed()表示逻辑方法的执行,如果逻辑方法抛出异常,根据是否要进行处理在环绕通知的方法里进行捕获或者往外抛出)
步骤1:spring配置
步骤2:切面的环绕通知方法。
public Object aroundAspect(ProceedingJoinPoint pjp){
Object obj=null;
try {
System.out.println("切面的前环绕通知功能实现了");
obj = pjp.proceed();
System.out.println("切面的后环绕通知功能实现了");
} catch (Throwable e) {
e.printStackTrace();
}
return obj;
}
Advice parameters(通知方法里的参数):逻辑功能方法的参数,通过配置,可以传入到切面的通知方法里。
案例(环绕通知参数)
步骤1:编写逻辑功能的方法,并有两个参数。
步骤2:编写配置文件,切面、环绕通知等(注意:配置方法里的参数名要和逻辑方法参数名相同,并且环绕通知方法名和参数名相同)。
测试:
@Test
public void test(){
ApplicationContext ac=new ClassPathXmlApplicationContext("spring-aop-schema-advice.xml");
ServiceFunction sf=ac.getBean("serviceFunction",ServiceFunction.class);
sf.serviceFunction("小明",5);
}
结果:
切面前置通知功能实现了
名字为小明
5次
切面的前环绕通知功能实现了
逻辑功能实现了
切面的后环绕通知功能实现了
切面后置通知功能实现了
切面返回后通知功能实现了
运行结果biz
给advice的方法添加额外的参数,匹配参数的类型和名字args,需在切点和切面都指定该参数
Around advice,第一个参数必须是ProceedingJoinPoint类型,调用其proceed方法,返回切点进程,循环通知可在该切点进程前后进行通知操作
Advice parameters 带有参数的配置
Advice parameter 带有参数
例子中的为环绕通知
Around advice
spring around复杂的环绕通知
Around advice 一般用在什么场景呢。
Advice parameters配置
Advice parameters
Around advice
几种advice的执行顺序
环绕通知的方法
几种通知的配置
Around advice
advice
配置参考1
advice parameters
round advice