SpringBoot: как включить класс @Configuration, только если соответствующая @EnablerAnnotation была использована в классе? - PullRequest
1 голос
/ 06 апреля 2020

Как включить класс @Configuration, только если использовалась соответствующая аннотация @EnableCustomConfiguration?

Чтобы было понятно, я пытаюсь воссоздать поведение общих аннотаций SpringBoot, например, @EnableEurekaClient, @EnableWebSecurity и т. Д.

Это мой активатор:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface EnableMultitenancy {}

Вот мои свойства конфигурации:

@Getter
@Setter
@Validated
@ConfigurationProperties("multitenancy")
public class MultitenancyProperties {
    @NotEmpty(message = "You must provide at least one tenant")
    private List<Tenant> tenants;
}

и это мой класс конфигурации:

@Configuration
@Conditional("On EnableMultitenancy used")
@EnableConfigurationProperties(MultitenancyProperties.class)
public class MultitenancyConfiguration{
    @Bean
    public MyFirstBean first(MultitenancyProperties properties){
        return new MyFirstBean(properties);
    }

    @Bean
    public MySecondBean second(MultitenancyProperties properties){
        return new MySecondBean(properties);
    }
}

Как я могу написать такое условие, например, аннотация использовалась для класса / компонента?

1 Ответ

0 голосов
/ 06 апреля 2020

В вашем классе MultitenancyConfiguration вам просто нужно заменить текущую аннотацию @Conditional на @ConditionalOnClass(EnableMulitenancy.class).

Обновление: Извините, я неправильно понял. Почему бы вам просто не импортировать класс MultitenancyConfiguration, используя @Import(MultitenancyConfiguration.class) в вашем классе EnableMultitenancy? Это гарантирует, что ваш класс MultitenancyConfiguration включается всякий раз, когда используется @EnableMultitenancy.

...