当前位置: 首页 > 知识库问答 >
问题:

Spring AOP在一个方法中工作,而在另一个同类中不工作[重复]

诸葛绍元
2023-03-14
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) {
        //
        //
    }
}

共有1个答案

梁丘招
2023-03-14

getapiresponse必须由另一个组件调用,如果只是在内部调用它,那么基于简单代理的机制将无法工作。

示例:

public void someMethod() {
    this.getAPIResponse(...)
}

代理不会截获建议类中的本地或内部方法调用,因此不会激发/调用方面的建议方法。

 类似资料:
  • 我有两个include文件(fill_boxMain.php和fill_boxBottom.php)。这两个都包含在my index.php中,用于按顺序填充两个div的内容。 例如: 第一个(fill_boxMain.php)工作正常。无论我如何安排或更改代码,第二个都会失败,并且会出现相同的可重复错误。i、 e.mysqli_查询($dbc,$q)失败。 选择查询在phpMyAdmin中运行良

  • 问题内容: 詹金斯(哈德森)是否有办法从另一个工作中禁用一个工作? 基本上,我们有一个进行标准构建/测试的构建环境。我们还使用相同的Jenkins实例来执行其他一些操作,例如自动安装产品的新版本(某些自动化测试需要此功能)。当我们运行某些“额外”作业时,我们希望暂时禁用“标准”作业(然后在以后自动启用它们)。 理想情况下,在作业上会有一些额外的构建步骤,例如“禁用XYZ作业”。或者,如果有通过AN

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 我是计算机视觉新手,还没有真正学习过阈值、模糊或其他过滤器的教程。我使用下面两段代码找出图像中的轮廓。一方面,这种方法是有效的,但另一方面,它不是。我需要帮助理解发生这种情况的原因,以便说服自己背景中发生了什么。 工作代码段: 不工作的代码段 如果有人能找出这里发生的错误的原因,我将不胜感激。 我所面对的错误是: 回溯(最近一次调用last):文件“convexhull.py”,第27行,在im2

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误