用Java和Spring引导实例化适当的策略

用Java和Spring引导实例化适当的策略,java,spring-boot,strategy-pattern,Java,Spring Boot,Strategy Pattern,我有以下情况: 我必须使用(目前)两种不同的策略来验证令牌,它们都做相同的事情(检查令牌是否有效),但方式不同 我目前处理策略实例化的方式如下所示: @服务 公共类验证服务{ private Map validationMap=新HashMap(); 公共验证服务(){ validationMap.put(ValidationType.A,new AValidationStrategy()); put(ValidationType.B,新的BValidationStrategy()); } 公共

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

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

@服务
公共类验证服务{
private Map validationMap=新HashMap();
公共验证服务(){
validationMap.put(ValidationType.A,new AValidationStrategy());
put(ValidationType.B,新的BValidationStrategy());
}
公共void验证(ValidationType,字符串标记){
ValidationStrategy strategy=validationMap.get(类型);
如果(策略==null){
策略=新的创新策略();
}
策略验证(令牌);
}
}
我的问题是:有没有更好的方法根据ValidationType枚举设置正确的验证?因为随着新的验证策略被添加到系统中,构造函数将越来越多

我想,当ValidationService bean通过某种Spring Boot配置创建时,也许我可以保留该映射变量并添加新的策略实例,但我不知道如何在Spring Boot实例化之后访问该bean

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


PS:任何代码片段或有用的链接都将不胜感激

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

是的,ValidationType是一个枚举,我喜欢使用注释查找所有ValidationStrategy类实现的想法,可能类似于@ValidationStrategy(ValidationType.a)。但是,我可以将代码放在哪里来查找注释的类并将它们添加到服务映射属性?比如,我在哪里“告诉”spring boot需要执行此代码