#java #spring #spring-boot
#java #spring #spring-boot
Вопрос:
Я пытаюсь создать пользовательскую аннотацию для включения функциональности на основе флагов функций. Я основываю свой подход на ConditionalOnProperty
аннотации, но для обеспечения возможности повторного использования кода я хочу определить общий префикс, который можно использовать везде, где мне нужна эта функциональность.
Я определил свою аннотацию, как показано ниже.
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@ConditionalOnProperty(prefix = "foo.bar")
public @interface ConditionalOnFeature {
@AliasFor(annotation = ConditionalOnProperty.class, attribute = "value")
String[] value();
}
Я использую AliasFor
аннотацию для установки value
атрибута в ConditionalOnProperty
аннотации и жестко кодирую свой префикс как foo.bar
(все мои функции будут находиться под этим свойством).). Насколько я понимаю переопределение аннотации Spring, это должно сработать.
Однако, когда я использую это для класса (например, контроллера), код не компилируется, указывая, что The name or value attribute of @ConditionalOnProperty must be specified
.
@RestController
@ConditionalOnFeature("enable-fancy-controller")
public class FancyController {
@RequestMapping(value = "/fancy-method", method = RequestMethod.GET)
public String fancyMethod() {
return "Fancy";
}
}
Однако он отлично работает, когда я вместо этого использую свою аннотацию для метода. Успешно компилируется и ведет себя так, как задумано.
@RestController
public class FancierController {
@ConditionalOnFeature("enable-fancier-method")
@RequestMapping(value = "/fancier-method", method = RequestMethod.GET)
public String fancierMethod() {
return "Fancier";
}
}
Я неправильно настроил свою аннотацию? Или это какая-то ошибка с Spring?