提问者:小点点

对Java和spring boot实施适当战略


我有以下情况:我必须使用(目前)两种不同的策略来验证一个令牌,它们都做相同的事情(检查令牌是否有效),但方式不同。

我当前处理策略实例化的方式如下所示:

@Service
public class ValidationService {
    private Map<ValidationType, ValidationStrategy> validationMap = new HashMap<>();

    public ValidationService() {
        validationMap.put(ValidationType.A, new AValidationStrategy());
        validationMap.put(ValidationType.B, new BValidationStrategy());
    }

    public void validate(ValidationType type, String token) {
        ValidationStrategy strategy = validationMap.get(type);
        if(strategy == null) {
            strategy = new NoValidationStrategy();
        }
        strategy.validate(token);
    }
}

我的问题是:根据ValidationType枚举来设置正确的验证有没有更好的方法? 因为当系统中添加新的验证策略时,构造函数会越来越大。

我想也许我可以保留那张地图<>; ValidationService bean将由某种spring boot配置创建,但我不知道如何在spring boot实例化bean之后访问它。

如果你有更好的方法帮我! :)

PS:任何代码片段或有用的链接将非常感谢!


共1个答案

匿名用户

当然,一个选择是反思。 假设ValidationType是枚举,每个ValidationStrategy都可以将ValidationType定义为方法或通过注释。 然后您可以找到所有的ValidationStrategy并将它们分组到基于类型的映射中。 这将解决每次添加新的验证策略时都必须更新映射的问题。