有没有办法从 Spring 中的外部库注入拦截器?

Is there any way to inject Interceptor from external library in Spring?

我正在开发一个 jar 库并试图从外部 jar 库向应用程序注入一个拦截器。

例如:

外部库

MyExternalInterceptor.java

public class MyExternalInterceptor implements HandlerInterceptor {
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // Do something
    }
}

我尝试在外部库中使用 AOP,但它不起作用。

InterceptorAspect.java

@Around("execution(* org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.addInterceptors(..))")
public Object aspect(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    // Tried to inject MyExternalInterceptor here
    Object result = proceedingJoinPoint.proceed();
    return result;
}

在使用该库的应用程序中:

申请

MyConfiguration.java

@Configuration
public MyConfiguration extends WebMvcConfigurationSupport {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SpringTestInterceptor()); // client's own interceptor
        /* Add MyExternalInterceptor not explicitly but implicitly using AOP or other things */
    }
}

有什么方法可以从外部库向应用程序注入拦截器吗?

我知道这个问题很晦涩(对此深表歉意),但你能给我任何建议或提示以使其有效吗?

感谢所有阅读我的问题的人:)

(为了澄清,我更新了更多细节)

总结

  • 在客户端和库端使用 WebMvcConfigurer 而不是 WebMvcConfigurationSupport
  • 不需要 AoP

我使用 WebMvcConfigurer 而不是 WebMvcConfigurationSupport 并更改如下代码:

外部库

MyExternalInterceptor.java

  • 和以前一样

InterfaceAspect.java

  • 不再需要它了

MyExternalLibConfiguration.java

@Configuration
public class MyExternalLibConfiguration implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyExternalInterceptor());
    }
}

应用程序(客户端)

MyConfiguration.java

@Configuration
public MyConfiguration implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SpringTestInterceptor()); // client's own interceptor
        /* No need to add MyExternalInterceptor in here */
    }
}

就这些!正如 M. Deinum 在评论中所说,一切正常。

再次感谢 Deinum!