
spring.turbo.aop.AspectUtils Maven / Gradle / Ivy
package spring.turbo.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.AnnotationAttributes;
import spring.turbo.core.AnnotationHelper;
import spring.turbo.util.Asserts;
import javax.annotation.Nullable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
/**
* 切面相关工具
*
* @author 应卓
* @see AnnotationHelper
* @since 2.1.1
*/
public final class AspectUtils {
/**
* 私有构造方法
*/
private AspectUtils() {
}
/**
* 获取切面方法
*
* @param joinPoint {@link JoinPoint} 实例
* @return 切面方法
* @throws IllegalArgumentException 不能获取切面方法
*/
public static Method getMethod(JoinPoint joinPoint) {
Asserts.notNull(joinPoint, "joinPoint is null");
var signature = joinPoint.getSignature();
if (signature instanceof MethodSignature methodSignature) {
return methodSignature.getMethod();
} else {
throw new IllegalArgumentException("Cannot get proxies method");
}
}
/**
* 获取切面拦截对象
*
* @param joinPoint {@link JoinPoint} 实例
* @return 切面拦截对象
*/
public static Object getTarget(JoinPoint joinPoint) {
Asserts.notNull(joinPoint, "joinPoint is null");
return joinPoint.getTarget();
}
/**
* 获取切面拦截对象类型
*
* @param joinPoint {@link JoinPoint} 实例
* @return 切面拦截对象类型
*/
public static Class> getTargetType(JoinPoint joinPoint) {
return getTarget(joinPoint).getClass();
}
/**
* 查找被拦截方法上的元注释
*
* @param joinPoint {@link JoinPoint} 实例
* @param annotationType 元注释类型
* @param 元注释类型泛型
* @return 元注释实例或 {@code null}
*/
@Nullable
public static A getMethodAnnotation(
JoinPoint joinPoint,
Class annotationType) {
var method = getMethod(joinPoint);
return AnnotationHelper.findAnnotation(method, annotationType);
}
/**
* 获取被拦截方法上的元注释相关的 {@link AnnotationAttributes} 实例
*
* @param joinPoint {@link JoinPoint} 实例
* @param annotationType 元注释类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes getMethodAnnotationAttributes(
JoinPoint joinPoint,
Class annotationType) {
var method = getMethod(joinPoint);
return AnnotationHelper.findAnnotationAttributes(method, annotationType);
}
/**
* 获取被拦截方法上的元注释相关的 {@link AnnotationAttributes} 实例
*
* @param joinPoint {@link JoinPoint} 实例
* @param annotationType 元注释类型
* @param classValueAsString {@link Class} 输出为字符串型
* @param nestedAnnotationsAsMap 元注释中内嵌的元注释输出位 {@link java.util.Map} 类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes getMethodAnnotationAttributes(
JoinPoint joinPoint,
Class annotationType,
boolean classValueAsString,
boolean nestedAnnotationsAsMap) {
var method = getMethod(joinPoint);
return AnnotationHelper.findAnnotationAttributes(method, annotationType, classValueAsString, nestedAnnotationsAsMap);
}
/**
* 查找被拦截对象类型上的元注释
*
* @param joinPoint {@link JoinPoint} 实例
* @param annotationType 元注释类型
* @param 元注释类型泛型
* @return 元注释实例或 {@code null}
*/
@Nullable
public static A getObjectTypeAnnotation(JoinPoint joinPoint, Class annotationType) {
var targetType = getTargetType(joinPoint);
return AnnotationHelper.findAnnotation(targetType, annotationType);
}
/**
* 获取被拦截对象类型上的元注释相关的 {@link AnnotationAttributes} 实例
*
* @param joinPoint {@link JoinPoint} 实例
* @param annotationType 元注释类型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes getTargetTypeAnnotationAttributes(
JoinPoint joinPoint,
Class extends Annotation> annotationType,
boolean classValueAsString,
boolean nestedAnnotationsAsMap) {
var targetType = getTargetType(joinPoint);
return AnnotationHelper.findAnnotationAttributes(targetType, annotationType, classValueAsString, nestedAnnotationsAsMap);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy