文章目录
自定义注解
该注解用于前置通知
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FunBtnPermissions {
String value()default"";
}
该注解用于环绕通知
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FunPermissions {
String value()default"";
}
一、aop切面代码如下
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.com.core.annotation.FunPermissions;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class FunPermissionsAspect {
@Pointcut("@annotation(com.core.annotation.FunPermissions)")
public void funPermissionscut() {
}
@Pointcut("@annotation(com.core.annotation.FunBtnPermissions)")
public void funBtnPermissionscut() {
}
@Around("funPermissionscut()")
public Object around(ProceedingJoinPoint point) {
Signature signature = point.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method != null){
FunPermissions annotation = method.getAnnotation(FunPermissions.class);
//获取注解中向value赋的值
String value = annotation.value();
//获取方法上的参数名称数组
String[] parameters = methodSignature.getParameterNames();
//获取方法上的参数值数组
Object[] parameterVals = point.getArgs();
if(判断是否让加@FunPermissions注解的方法继续执行){
try {
//这个return的时候加@FunPermissions注解的方法继续执行
return point.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
//这个return的时候加@FunPermissions注解的方法停止执行
return null;
}
@Before("funBtnPermissionscut()")
public void before(JoinPoint point) {
Signature signature = point.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method != null){
//写业务
}
}
结束