Around advice
通知方法的第一个参数必须是ProceedingJoinPoint类型
示例:
public Object around(ProceedingJoinPoint pjp) {
Object obj = null;
//执行方法 会抛出异常
try{
//做你想做的事情
Object retVal = pjp.proceed();
//做你想做的事情
}catch(Throwable e){
e.printStackTrace();
}
return retVal;
}
Advice parameters
带参数的Advice
示例:
XML:
<aop:around method="aroundInit" pointcut="execution(* com.imooc.aop.schema.advice.biz.AspectBiz.init(String, int))
and args(bizName, times)"/>
切面:
public Object aroundInit(ProceedingJoinPoint pjp, String bizName, int times) {
System.out.println(bizName + " " + times);
Object obj = null;
try {
System.out.println("MoocAspect aroundInit 1.");
obj = pjp.proceed();
System.out.println("MoocAspect aroundInit 2.");
} catch (Throwable e) {
e.printStackTrace();
}
return obj;
}
Introductions
允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象。
由<aop.sapect>中的<aop.declare-parents>元素声明该元素用于声明所匹配的类型拥有一个新的parent(因此得名)。
示例:
<aop:declare-parents types-matching="com.imooc.aop.schema.advice.biz.*(+)"
implement-interface="com.imooc.aop.schema.advice.Fit"
default-impl="com.imooc.aop.schema.advice.FitImpl"/>
测试代码:
@Test
public void testFit() {
Fit fit = (Fit)super.getBean("aspectBiz");
fit.filter();
}
可以进行强制类型转换,说明是FitImpl的子类,并且实现了接口的filter()方法。