Java 将Loadtime weaver与第三方jar类方法拦截器一起使用

Java 将Loadtime weaver与第三方jar类方法拦截器一起使用,java,spring,aspectj,load-time-weaving,Java,Spring,Aspectj,Load Time Weaving,我试图从我的spring boot应用程序截获第三方jar中的一个类 我正试着像你一样去做 <context:load-time-weaver aspectj-weaving="on" weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/> <bean id="instrumentationLoadTimeWeaver" class=

我试图从我的spring boot应用程序截获第三方jar中的一个类

我正试着像你一样去做

<context:load-time-weaver aspectj-weaving="on" weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/>

    <bean id="instrumentationLoadTimeWeaver"
          class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
但是,上面的代码给出了一个没有找到自定义加载时间weaver的错误。我不想在VM参数中使用spring-instrumentation.jar

也已经尝试过带注释的基于类的方法,但是,在某个地方读到Spring可能在加载某些类之后加载该类,因此这可能不起作用

编辑:


添加了日志和建议。这里我已经手动创建了一个代理,请参见最后一行,我认为这不是一个好的解决方案。

只是假设您想要的是可能的(即有一种方法可以让LTW工作,而无需在JVM命令行上指定Java代理),而您只是还没有弄清楚如何正确配置它,你能确认一下,用纺织代理的话,它能起作用吗?在这还不清楚之前,我们不能从这里再进一步。因为这里没有显示任何方面代码(只有静态变量,没有切入点和建议),所以现在没有人能解释为什么它不工作。顺便说一句,我也不知道你所说的“带注释的基于类的方法”是什么意思。@kriegaex添加了上面的代码,很抱歉之前错过了通知。我确实通过创建手动代理完成了这项工作,请参见建议的最后一行。请告知是否有更好的方式处理加载时间编织感谢更新。不幸的是,看到您的方面和一个小的配置代码片段并不能帮助我重现由应用程序代码、配置和方面代码组成的问题。请添加一个完整的。你也没有回答我的问题。如果没有手动代理功能(您的代码中也没有显示),并且通过命令行配置了常规LTW,您的代码是否完全按照预期工作?当然,我将创建一个示例应用程序并共享。。。
@Aspect
public class LogInterceptor
{
    private static final Logger PERF_LOGGER = LoggerFactory.getLogger("PERFLOG");

    private static final Logger LOGGER = LoggerFactory.getLogger(LogInterceptor.class);
    private static final int SYSTEM_ERROR_STATUS_CODE = -1;
    private static final int SYSTEM_SUCCESS_STATUS_CODE = 0;



@Around(
            "execution(* com.alpha.executor.dao..*(..)) || "
                    + "execution(* com.alpha.executor.resource..*(..)) || "
                    + "execution(* com.alpha.executor.client..*(..)) || "
                    + "execution(* com.alpha.executor.service..*(..)) || "
                    + "execution(* com.alpha.executor.proxy.*.*(..)) ")
    public Object logRecordInPerflog(ProceedingJoinPoint joinPoint) throws Throwable
    {

        String activityName = joinPoint.getTarget().getClass().getSimpleName();
        String operationName = activityName + "." + joinPoint.getSignature().getName();
        RequestLog reqLog = new RequestLog(operationName, activityName, joinPoint.getArgs());

        PERF_LOGGER.info(reqLog.getLoggerString());
        try
        {
            Object result = joinPoint.proceed();
            ResponseLog resLog = new ResponseLog(reqLog, result, SYSTEM_SUCCESS_STATUS_CODE);
            PERF_LOGGER.info(resLog.getLoggerString());
            return result;
        }
        catch (Exception ex)
        {
            logException(reqLog, ex);
            throw ex;
        }
    }

    private void logException(RequestLog reqLog, Exception ex)
    {
        ResponseLog resLog;
        if (ex instanceof SvxException)
        {
            SvxException svxException = (SvxException) ex;
            ErrorCode errorCode = svxException.getSvxExceptionDetail().getErrorCode();
            ErrorResponse errorResponse = new ErrorResponse(errorCode,svxException.getSvxExceptionDetail().getErrorDescription());
            resLog = new ResponseLog(reqLog,null,errorCode.getHttpStatus().value(),errorResponse,errorCode.getErrorType().toString());

        }
        else
        {
            LOGGER.error("Error: ", ex);
            resLog = new ResponseLog(reqLog, null, SYSTEM_ERROR_STATUS_CODE, ErrorType.SYSTEM_ERROR.toString(), ex.getMessage());

        }
        PERF_LOGGER.info(resLog.getLoggerString());
    }

}