是否可以基于其他属性值使用spring属性验证?

我不能使用@ConditionalOnProperty,因为该属性在很多地方都使用过。我不能只为每个bean放入@ConditionalOnProperty

这是我所拥有的:

@ConfigurationProperties
public class Property1 {
    boolean property2Enabled
}

@ConfigurationProperties
public class Property2 {
    @NotNull
    @Size(min = 1)
    String thisShouldBeValidated;

}


在这种情况下,仅当thisShouldBeValidated的值为property2Enabled时才应使用true的验证。

是否可以通过一些春季注释来做到这一点?
如果编写自定义验证,是否可以通过某种方式获取property2Enabled的值?

最佳答案

尝试可以应用于@Bean方法的Spring 4 @Conditional批注。

import org.springframework.context.annotation.Condition;

@ConfigurationProperties
public class Property1 implements Condition{
    boolean property2Enabled;

    @Override
    public boolean matches()
       return property2Enabled;
    }
}


仅当property2Enabled的值为true时,才应应用thisShouldBeValidated。否则将其忽略。

import org.springframework.context.annotation.Condition;

public class Property2 {
    @NotNull
    @Size(min = 1)
    String thisShouldBeValidated;

    @Bean
    @Conditional(Property1.class)
    void Property2 yourMethod() {
       system.out.println("whatever"+ thisShouldBeValidated);
    }
}


如您所见,为@Conditional提供了一个指定条件的类-在本例中为Property1
赋予@Conditional的类可以是实现Condition的任何类型
接口。

08-07 04:56