我正在使用 Spring AOP 进行自定义注释,它在其他方法中触发良好,但在下面提到的方法中不起作用。我是 AOP 概念的新手,所以请帮忙。我尝试在其他运行良好的方法上使用相同的 AOP。我不知道这正在发生。我很早就知道 jdk 代理,调用方法必须是公共的,所以我改变了,即使这样做也没有解决我的问题。
自定义注释:
package com.abc.xyz.common.logger;
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 UPIPGLog {
String type() default "OTHER";
boolean logParams() default true;
String[] skipRegexInResponseLog() default {};
String[] maskInResponseLog() default {};
}
方面:
package com.abc.xyz.common.logger;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.EnumUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Aspect
@Order(3)
public class UPIPGAutologger{
@Around("execution(@com.abc.xyz.common.logger.UPIPGLog * *(..)) && @annotation(upipgLog)")
public Object performanceLog(ProceedingJoinPoint joinPoint, UPIPGLog upipgLog) {
Object response = null;
-
-
-
}
}
调用方法:
package com.abc.xyz.handler.gateway.impl.opt.idk;
@Component
public class ABC implements XYZ {
@UPIPGLog
@Override
public <RESPONSE> RESPONSE getAPIResponse(LogType logType, Integer timeoutInSeconds, String url,
String payload, Class<RESPONSE> responseClass, HTTPRequestType requestType, String contentType,
Map<String, Object> headers, Map<PGConfigParameters, Object> config) {
//
//
}
}