#java #spring #spring-boot #spring-mvc #spring-restcontroller
Вопрос:
Я написал перехватчик для генерации журналов обслуживания для SpringBoot Java Rest API. У меня есть приведенный ниже код для определения пользовательского WebMvcConfigurer:
package com.gem.common.interceptors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
LoggerInterceptor logInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor);
}
}
Я хотел бы использовать этот InterceptorConfig в разных модулях. Могу ли я упаковать его и использовать или мне нужно определить его в каждом модуле?
Комментарии:
1. Почему бы тебе не быть в состоянии сделать это? Spring Boot делает то же самое для различных других перехватчиков.
Ответ №1:
Я полагаю, что с «другими модулями» вы спрашиваете, можете ли вы сделать этот код доступным и для других приложений Spring boot?
Если это так — тогда: да, вы можете упаковать его в jar и добавить в качестве зависимости ко всем другим вашим модулям. Однако я опубликую способ сделать это чуть ниже — просто чтобы предупредить вас — если это только для этого простого класса, решение того не стоит.
Короче говоря, что вам нужно сделать, так это создать свой собственный внешний артефакт (обычно это делается с помощью maven или gradle. Вы создаете новый проект maven для вашего общего кода. Это должно зависеть от некоторых базовых библиотек, чтобы у вас была @Configuration
доступная аннотация. Поместите свой класс так, как описано в этом проекте, и создайте файл src/main/resources/META-INF/spring.factories
file. Там вам нужно будет указать на этот класс.
Затем вы создаете этот проект и загружаете полученный jar-файл в репозиторий пакетов. Как только это будет сделано, вы можете добавить его в качестве зависимости к своему проекту. При запуске Spring boot найдет spring.factories
файл и автоматически включит классы, которые упоминаются там при его инициализации.
Пожалуйста, также обратите внимание, что это всего лишь высокоуровневое объяснение, и вам понадобится больше деталей. У Spring есть хорошая документация по этому варианту использования, и у них также есть демонстрационный проект, демонстрирующий этот механизм расширения.