<!-- 配置spring创建容器时要扫描的包--> <context:component-scan base-package="com"></context:component-scan> <!-- 配置spring开启注解AOP的支持 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
/**
* 该类是工具类,用于打印日志信息
*/
@Component("logger")//配置进容器
@Aspect//表示当前类是一个切面类
public class logger {
@Pointcut("execution(* com.service.imp.*.*(..))")
private void pt(){}
/**
* 用于打印日志,计划在切入点方法之前执行
*/
//前置通知
@Before("pt()")
public void beforePrintLog() {
System.out.println("前置通知开始打印日志.......");
}
//后置通知
@AfterReturning("pt()")
public void afterReturningPrintLog() {
System.out.println("后置通知开始打印日志.......");
}
//异常通知
@AfterThrowing("pt()")
public void afterThrowingPrintLog() {
System.out.println("异常通知开始打印日志.......");
}
//最终通知
@After("pt()")
public void afterPrintLog() {
System.out.println("最终通知开始打印日志.......");
}
//环绕通知
//@Around("pt()")
public Object aroundPrintLog(ProceedingJoinPoint pjp) {
Object ret = null;
try {
Object[] args = pjp.getArgs();
beforePrintLog();
ret = pjp.proceed(args);
afterReturningPrintLog();
return ret;
} catch (Throwable t) {
afterThrowingPrintLog();
new RuntimeException(t);
} finally {
afterPrintLog();
}
return ret;
}
}