【发布时间】:2022-02-08 08:59:24
【问题描述】:
我正在开发一个 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 */
}
}
有没有办法从外部库向 App 注入拦截器?
我知道这个问题非常晦涩(对此感到抱歉),但您能给我任何建议或提示以使其发挥作用吗?
感谢任何阅读我问题的人:)
(我更新了更多细节以进行澄清)
【问题讨论】:
-
尝试将
SpringTestInterceptor注释为@Component,并作为参数注入addInterceptors(...)。 -
只需添加一个带有
@Configuration注解的WebMvcConfigurer(不是WebMvcConfigurerSupport!)即可注册您要注册的拦截器。您的图书馆的用户应该扫描/使用该配置类。您需要拨打addInterceptor否则不会添加任何内容。 -
嗨@AndrewS,感谢您的回答!实际上,我想注入
MyExternalInterceptor(而不是SpringTestInterceptor)——抱歉让您感到困惑。 -
真是一个惊喜!你拯救了我的一天@M.Deinum!这真的像魔术一样工作!我真的很感谢你:D
标签: java spring web aop interceptor