代码实现:
1.目标对象
public class MyTarget3 {
public int save(int a) {
//int i = 1/0;
System.out.println("save.....");
return a*a;
}
}
2.通知
@Aspect
public class MyAdvice3 {
//公共切入点
@Pointcut("execution(* *..*.save(..))")
private void pt() {
}
//这里方法的执行顺序与方法名有关,字母数字排序(可能与ascii有关)
@Before("execution(* *..*.save(..))")
public void beforea_a() {
System.out.println("beforeaa");
}
@Before("execution(* *..*.save(..))")
public void beforeab() {
System.out.println("beforeab");
}
@After(value="execution(* *..*.save(..))")
public void after() {
System.out.println("after");
}
@AfterReturning(pointcut="MyAdvice3.pt()",returning="ret")
public void afterReturning(Object ret) {
System.out.println("afterReturning"+ret);
}
public void afterThrowing() {
System.out.println("afterThrowing");
}
@Around("MyAdvice3.pt()")
public Object round(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("round before");
Object jet = pjp.proceed();
System.out.println("round after jet="+jet);
return 120;
}
3.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--将目标对象与通知定义为bean -->
<!--开启注解配置 -->
<aop:aspectj-autoproxy/>
<bean id="myAdvice3" class="com.array.aop.annotation.MyAdvice3"></bean>
<bean id="myTarget3" class="com.array.aop.annotation.MyTarget3"></bean>
</beans>
4.测试:
public class App3 {
public static void main(String[] args) {
ApplicationContext act = new ClassPathXmlApplicationContext("application5.xml");
MyTarget3 target3 = (MyTarget3) act.getBean("myTarget3");
int end = target3.save(3);
System.out.println("end="+end);
}
}