Person p = ctx.getBean(chinese, Person.class);
System.out.println(p.sayHello(张三));
p.eat(西瓜);
}
}
1.6 其它处理类型切面
AfterReturning增强处理:目标方法正常完成后被织入;
AfterThrowing增强处理:处理程序中未处理的异常;
After增强处理:目标方法正常和非正常结束都执行;
Around增强处理:等于Before增强处理和AfterReturning增强处理的总和;
2. 基于XML配置文件的管理方式
2.1 定义切面类1,Bean类同上
package test.advice;
import org.aspectj.lang.*;
import java.util.Arrays;
public class FourAdviceTest {
public Object processTx(ProceedingJoinPoint jp) throws java.lang.Throwable {
System.out.println(Around增强:执行目标方法之前,模拟开始事务...);
// 访问执行目标方法的参数
Object[] args = jp.getArgs();
// 当执行目标方法的参数存在,
// 且第一个参数是字符串参数
if (args != null && args.length > 0
&& args[0].getClass() == String.class) {
// 改变第一个目标方法的第一个参数
args[0] = 被改变的参数;
}
// 执行目标方法,并保存目标方法执行后的返回值
Object rvt = jp.proceed(args);
System.out.println(Around增强:执行目标方法之后,模拟结束事务...);
return rvt + 新增的内容;
}
public void authority(JoinPoint jp) {
System.out.println(②Before增强:模拟执行权限检查);
// 返回被织入增强处理的目标方法
System.out.println(②Before增强:被织入增强处理的目标方法为:
+ jp.getSignature().getName());
// 访问执行目标方法的参数
System.out.println(②Before增强:目标方法的参数为:
+ Arrays.toString(jp.getArgs()));
// 访问被增强处理的目标对象
System.out.println(②Before增强:被织入增强处理的目标对象为: + jp.getTarget());
}
public void log(JoinPoint jp, Object rvt) {
System.out.println(AfterReturning增强:获取目标方法返回值: + rvt);
System.out.println(AfterReturning增强:模拟记录日志功能...);
// 返回被织入增强处理的目标方法
System.out.println(AfterReturning增强:被织入增强处理的目标方法为:
+ jp.getSignature().getName());
// 访问执行目标方法的参数
System.out.println(AfterReturning增强:目标方法的参数为:
+ Arrays.toString(jp.getArgs()));
// 访问被增强处理的目标对象
System.out.println(AfterReturning增强:被织入增强处理的目标对象为: + jp.getTarget());
}
public void release(JoinPoint jp) {
System.out.println(After增强:模拟方法结束后的释放资源...);
// 返回被织入增强处理的目标方法
System.out.println(After增强:被织入增强处理的目标方法为:
+ jp.getSignature().getName());
// 访问执行目标方法的参数
System.out.println(After增强:目标方法的参数为: + Arrays.toString(jp.getArgs()));
// 访问被增强处理的目标对象
System.out.println(After增强:被织入增强处理的目标对象为: + jp.getTarget());
}
}
2.2 定义切面类2
package test.advice;
public class SecondAdviceTest {
// 定义Before增强处理
public void authority(String aa) {
System.out.println(目标方法的参数为: + aa);
System.out.println(①号Before增强:模拟执行权限检查);
}
}
2.3 Spring配置文件
xmlns:aop=http://www.springframework.org/schema/aop
xsi:schemaLocation=http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd>