java - 将参数传递给自定义条件

标签 java spring spring-boot

我想做如下的事情来有条件地加载一个 bean:

@Conditional(OnAuthoritieCondition.class, "SOME_INPUT_STRING")

然而,当我尝试实现它时,我得到以下信息:

public class OnAuthoritieCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

现在我的问题是我如何实现一个带参数的自定义条件,或者是否有更好的方法来做我想做的事情?

最佳答案

创建您的自定义注释

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

import org.springframework.context.annotation.Conditional;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Conditional(value = CustomCondition.class)
public @interface ConditionalController {

  String condition();

}

您的自定义条件

public class CustomCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
      Map<String, Object> attributes = metadata.getAnnotationAttributes(ConditionalController.class.getName());
      String condition = (String) attributes.get("condition");
      return "GO".equalsIgnoreCase(condition);
    }

}

像这样使用它

@ConditionalController(condition = "GO")

关于java - 将参数传递给自定义条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56669125/

相关文章:

java - java中线程的顺序执行

java - 如何更改 Android 虚拟设备的 CPU/ABI?

Spring 请求映射通配符异常

java - 是否有等效于 Spring 的 @Value 注释的 JSR-330?

java - 如何在 Tomcat 服务器上运行的 Spring MVC 应用程序中使用单个 "application wide"线程池

java - 如何获取 thymeleaf 中的内容路径?

java - (作业)Java错误: Incompatible Types

java - Spring Boot - .dll 已加载到具有两个项目的另一个类加载器中

java - 在使用 @SpringBootTest 运行的测试中定义 tomcat 属性

mysql - Spring Boot + Liquibase:通信链接失败