Могу ли я использовать @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
здесь я не вижу абсолютно никакой причины, по которой ваш код не будет работать, вы его пробовали?