Могу ли я использовать экземпляр WebMvcConfigurer в другом модуле?

#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 есть хорошая документация по этому варианту использования, и у них также есть демонстрационный проект, демонстрирующий этот механизм расширения.