业务Bean:
package com.chris.aop;
import org.springframework.stereotype.Service;
public class TestServiceBean {
public void save(){
System.out.println("save...");
}
public String update(String string){
System.out.println("update...");
return string;
}
public void add(String name,int age){
System.out.println("add..." +name+"-"+age);
}
}
切面类:
package com.chris.aop;
import org.aspectj.lang.ProceedingJoinPoint;
public class InterceptorDemo {
private void allMethod(){};//切入点的名称就是方法名
public void doSomethingBefore(String name,int sex){
System.out.println("前置通知...");
}
public void doSomethingAfter(){
System.out.println("后置通知...");
}
public void doSomethingFinally(String update){
System.out.println("最终通知..."+update);
}
public void doSomethingInEx(Exception ex){
System.out.println("异常通知...");
}
public Object doSomethingAround(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("进入环绕通知...");
//执行目标对象的业务方法
Object result = pjp.proceed();
System.out.println("退出环绕通知...");
return result;
}
}
在beans.xml文件中配置实现AOP:
<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 业务Bean --> <bean id="testService" class="com.chris.aop.TestServiceBean"/> <!-- 切面类 --> <bean id="aopDemo" class="com.chris.adp.InterceptorDemo"/> <!-- 使用 aop 配置 --> <aop:config> <!-- 定义一个切面 ref表示切面类的名称--> <aop:aspect ref="aopDemo"> <!-- 定义切入点 --> <aop:pointcut expression="execution(* com.chris.aop.TestServiceBean.*(..))" id="pointCut"/> <!-- 前置通知 pointcut-ref表示引用的切入点--> <aop:before pointcut-ref="pointCut" method="doSomethingBefore"/> <!-- 后置通知 pointcut-ref表示引用的切入点--> <aop:after pointcut-ref="pointCut" method="doSomethingAfter"/> <!-- 最终通知 pointcut-ref表示引用的切入点--> <aop:after-returning pointcut-ref="pointCut" method="doSomethingFinally"/> <!-- 异常通知 pointcut-ref表示引用的切入点--> <aop:after-throwing pointcut-ref="pointCut" method="doSomethingInEx"/> <!-- 环绕通知 pointcut-ref表示引用的切入点--> <aop:around pointcut-ref="pointCut" method="doSomethingAround"/> </aop:aspect> </aop:config> </beans>