所以我有一个可以在几个不同国家启动的应用程序,例如: mvn clean package -Dcountry = FRANCE RESP。 mvn clean package -Dcountry = GERMANY
对于不同的国家/地区,我有不同的行为,尤其是在我验证内容时。
所以我有这个包含国家相关验证器的类:
@Component
public class SomeValidatingClass {
private final Validator myCountrySpecificValidator;
@Autowired
public SomeValidatingClass(MyCountrySpecificValidator myCountrySpecificValidator) {
this.myCountrySpecificValidator = myCountrySpecificValidator;
}
public void doValidate(Object target, Errors errors) {
myCountrySpecificValidator.validate(target, errors);
}
}
第一个依赖国家/地区的验证码:
public class MyCountrySpecificValidator1 implements Validator {
@Override
public void validate(Object target, Errors errors) {
if (target == null) {
errors.rejectValue("field", "some error code");
}
}
}
第二个国家依赖验证者: 我们假设为
public class MyCountrySpecificValidator2 implements Validator {
@Override
public void validate(Object target, Errors errors) {
if (target != null) {
errors.rejectValue("field", "some other error code");
}
}
}
我的问题是
和resp。
答案 0 :(得分:4)
您可以使用@Conditional
注释来根据条件提供实施。喜欢这个
@Bean(name="emailerService")
@Conditional(WindowsCondition.class)
public EmailService windowsEmailerService(){
return new WindowsEmailService();
}
@Bean(name="emailerService")
@Conditional(LinuxCondition.class)
public EmailService linuxEmailerService(){
return new LinuxEmailService();
}
例如
public class LinuxCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux"); }
}
你可以使用你需要的任何财产
或
如果您需要多个bean,请使用定义活动配置文件的@Profile
注释
阅读here
更新:
更简单
@ConditionalOnProperty(name = "country", havingValue = "GERMANY", matchIfMissing = true) and annotate a method which return the germany validator. And the same for France.