Могу ли я использовать @ConditionalOnExpression для проверки значения свойства аннотации?

Я хочу иметь аннотацию, в которой он будет использовать другой класс конфигурации в зависимости от значения свойства. Это может работать примерно так:

(Все это псевдокод)

Аннотация:

import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(RedisConfig.class)
@Import(HazelCastConfig.class)
public @interface EnableCaching
{
    Class cacheType() default Redis.class;
}

Пример одного из конфигов:

import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.cache.annotation.EnableCaching;

import java.util.List;

@EnableCaching
@ConditionalOnExpression("#{T(com.mypackage.CacheAnnotationMatcher).checkCacheType(com.mypackage.Redis.class)}")
public class RedisConfig
{
    //...elided...
}

куда CacheAnnotationMatcher.checkProperty это класс и метод, который я создаю, который находит @EnableCaching аннотации и проверяет cacheType свойство и возвращает истину / ложь.

1 ответ

Я думаю, что вы могли бы использовать @ConditionalOnExpression здесь я не вижу абсолютно никакой причины, по которой ваш код не будет работать, вы его пробовали?

Другие вопросы по тегам