AOP与反射及自定义注解
2025年3月7日大约 1 分钟
AOP与反射及自定义注解
AOP=>拦截: 面向切面编程,在方法调用之前、之后或周围执行额外的操作,而无需更改这些方法本身的代码。
反射=>赋值: 能够在运行时调用对象的方法或访问其属性,并能对属性和方法进行修改,即便这些方法或属性是私有的。
自定义注解=>标识: 可用于标识需要执行某些操作,常与AOP,反射结合使用
自定义注解
//自定义注解,用于标识需要执行的地方
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthCheckAnnotation {
//如果设定有参数,则在方法中使用注解传递内容后,可获取到具体内容
String mustRole();
}
注解传递内容
@AutoFillAnnotation(mustRole="admin")
Public Result userList(){};
自定义切面类
@Aspect
@Component
public class AuthCheckAspect {
//环绕通知
//括号内指定切点(要切入的地方),为加了注解 authCheckAnnotation
@Around("@annotation(authCheckAnnotation)")
public Object bf(ProceedingJoinPoint point, AuthCheckAnnotation authCheckAnnotation) throws Throwable {
//获取注解标识的角色
String mustRole = authCheckAnnotation.mustRole();
//当前用户拥有的角色
List<String> userRole = StpUtil.getRoleList();
if (!userRole.contains(mustRole)) {
throw new CustomerException("没有管理员权限");
}
//满足角色权限,放行
return point.proceed();
}
}
使用场景
1.鉴权
管理员角色才能查看系统所有用户列表
2.实体类的公共字段赋值
商品创建人/修改人
3.统计某个方法执行时间
首先通过前置通知获取方法开始执行时间,然后再用后置通知获取结束时间。