先导包:spring的 aop和aspects包 以及下面2个jar;
业务层:
切面类:
package com.fjs.Aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class MyAspect{//切面类:
public void myBefore(JoinPoint joinPoint){
System.out.println("前置通知");
System.out.println(joinPoint.getSignature().getName());
}
public void hou(JoinPoint joinPoint){
System.out.println(joinPoint.getSignature().getName());
System.out.println("后置通知");
}
public Object myAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕前:");
Object obj=proceedingJoinPoint.proceed();
System.out.println("环绕后");
return obj;
}
public void myafter(){
System.out.println("最终通知");
}
}
//xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/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 id="userservice" class="com.fjs.Services.ServicesImpl"/>
<!--切面类-->
<bean id="MyAspects" class="com.fjs.Aop.MyAspect"/>
<!--spring:aspectj配置-->
<aop:config proxy-target-class="true">
<!--指定切面-->
<aop:aspect ref="MyAspects">
<!--定义一个切入点-->
<aop:pointcut id="myPointcut" expression="execution(* com.fjs.Services.ServicesImpl.*(..))"/>
<!--前置通知-->
<!--<aop:before method="myBefore" pointcut-ref="myPointcut"/>-->
<!--后置通知-->
<!--<aop:after-returning method="hou" pointcut-ref="myPointcut"/>-->
<!--环绕通知-->
<aop:around method="myAround" pointcut-ref="myPointcut"/>
</aop:aspect>
</aop:config>
</beans>
测试: