Spring全家桶:Spring AOP
Spring AOP(面向切面编程)是Spring框架的一个关键组件,它允许你定义跨越应用程序多个模块的横切关注点,例如日志记录、事务管理、性能监控等。
Spring AOP基于代理模式实现,主要有两种方式:JDK动态代理和CGLIB代理。
- 使用Spring AOP记录方法执行时间:
首先,你需要在Spring配置文件中启用AspectJ支持:
<aop:aspectj-autoproxy />
然后,创建一个Aspect类,并用@Aspect
注解标注:
@Aspect
@Component
public class PerformanceAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object profileAllMethods(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
System.out.println(proceedingJoinPoint.getSignature() + " executed in " + (end - start) + "ms");
return result;
}
}
这个Aspect会拦截com.example.service
包下所有方法的执行,并打印出方法执行的时间。
- 使用Spring AOP进行权限校验:
@Aspect
@Component
public class SecurityAspect {
@Before("execution(* com.example.service.*.*(..))")
public void checkPermission(JoinPoint joinPoint) {
if (!hasPermission(joinPoint)) {
throw new AccessDeniedException("No permission to access this method: " + joinPoint.getSignature());
}
}
private boolean hasPermission(JoinPoint joinPoint) {
// 实现权限校验的逻辑
return true;
}
}
这个Aspect会在执行com.example.service
包下的方法之前,检查是否有权限执行该方法。如果没有权限,则抛出AccessDeniedException
异常。
以上示例展示了如何使用Spring AOP来增强应用程序的横切关注点。在实际应用中,你可以根据具体需求定义不同的切面和通知类型(如@Before、@AfterReturning、@AfterThrowing、@After、@Around)。
评论已关闭