#java #spring #spring-boot #maven #pom.xml
Вопрос:
В настоящее время я работаю над проектом Spring boot. У меня есть зависимость от библиотечного проекта, в котором есть перехватчик(LibraryProjectInterceptor.java) и a public class LibraryProjectConfig implements WebMvcConfigurer
и переопределяет addInterceptors()
метод добавления LibraryProjectInterceptor
в InterceptorRegistry
. В моем реальном проекте, где я добавил эту зависимость от проекта библиотеки, я создал перехватчик ( ActualProjectInterceptor
), который необходимо выполнить после LibraryProjectInterceptor
выполнения. Я попытался добавить @Order(value = Ordered.LOWEST_PRECEDENCE)
в ActualProjectInterceptor
, чтобы он выполнялся после LibraryProjectInterceptor
, но это не работает. Кто-нибудь может мне помочь
Библиотечный проект:
public class LibraryProjectInterceptor implements HandlerInterceptor {
......
}
@Configuration
@EnableWebMVC
public class LibraryProjectConfig implements WebMvcConfigurer {
......
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(LibraryProjectInterceptor);
}
......
}
Фактический Проект:
pom.xml
......
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>library-project</artifactId>
<version>1.0.16</version>
</dependency>
......
@Component
@Order(value = Ordered.LOWEST_PRECEDENCE)
public class ActualProjectInterceptor implements HandlerInterceptor{
.......
}
@SpringBootApplication
public class ActualProjectConfig implements WebMvcConfigurer {
......
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(ActualProjectInterceptor);
}
......
}
Ответ №1:
Попробуйте это, я надеюсь, что это сработает.
@Component
public class ActualProjectInterceptor implements HandlerInterceptor {}
@SpringBootApplication
public class ActualProjectConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(ActualProjectInterceptor)
.order(Ordered.LOWEST_PRECEDENCE);
}
}
addInterceptor()
метод создает объект DSL регистрации перехватчика, у которого есть order()
метод для указания того, что вам нужно.
Комментарии:
1. Эй. Спасибо, чувак! Это сработало. Интересно, почему аннотация @Order не сработала. Не могли бы вы, пожалуйста, объяснить это
2. Я не могу ответить, не видя фактической кодовой
registry.addInterceptor(ActualProjectInterceptor)
базы -> >ActualProjectInterceptor
это имя было ссылкой на Spring Bean, или вы использовалиnew
оператор для создания объекта. Если второй вариант, я думаю,@Order
не сработает, потому что сильно связан с движком Spring, то основной причиной может быть создание класса в виде порядкового компонента (без поддержки Spring).3. Да! Я думаю, что вы правы. «LibraryProjectInterceptor» был добавлен в реестр с помощью оператора «новый», подобного этому реестру.addInterceptor(новый LibraryProjectInterceptor());