如何解决将 Spring bean 注入 enum 并在 enums 功能接口中调用它
好吧,我想我正在努力实现我无法实现的目标,但我想为我的应用程序中的所有字典值创建一个聚合器类。因此我创建了一个枚举,它有两个参数——第一个是字典名称,第二个是 Supplier
。我选择 Supplier
是因为提供的值会以不同的方式为每个字典计算。到目前为止,我想出了这个:
public enum DictionaryAggregator {
STATUS_X("statusX",StatusX::getDictionary),STATUS_Y("statusY",new Supplier<Map<String,?>>() {
@Override
public Map<String,?> get() {
return <would like to reference to statusYCache which is inside DictionaryAggregatorServiceInjector>;
}
});
private final String dictionaryName;
private final Supplier<Map<String,?>> dictionary;
public String getDictionaryName() {
return dictionaryName;
}
public Supplier<Map<String,?>> getDictionary() {
return dictionary;
}
DictionaryAggregator(String dictionaryName,Supplier<Map<String,?>> dictionary) {
this.dictionaryName = dictionaryName;
this.dictionary = dictionary;
}
@Component
static class DictionaryAggregatorServiceInjector {
@Autowired
private StatusYService statusYService;
}
}
但无论我尝试过什么,我都无法想出如何从 StatusYCache
服务中提供值。理想情况下,我想要实现的是 Supplier
的 STATUS_Y
可以轻松调用来自 StatusYService
的方法。
解决方法
我想我应该更频繁地使用我的大脑。我想出了这个:
public enum DictionaryAggregator {
STATUS_X("statusX",StatusX::getDictionary),STATUS_Y("statusY",new Supplier<Map<String,?>>() {
@Override
public Map<String,?> get() {
return new StatusYDictionaryClass(DictionaryAggregatorServiceInjector.shipmentStatusVos).getDictionary();
}
});
private final String dictionaryName;
private final Supplier<Map<String,?>> dictionary;
public String getDictionaryName() {
return dictionaryName;
}
public Supplier<Map<String,?>> getDictionary() {
return dictionary;
}
DictionaryAggregator(String dictionaryName,Supplier<Map<String,?>> dictionary) {
this.dictionaryName = dictionaryName;
this.dictionary = dictionary;
}
@Component
static class DictionaryAggregatorServiceInjector {
static List<StatusYObj> statusYList;
@Autowired
public StatusYService statusYService;
@PostConstruct
public void init() {
statusYList = statusYService.getStatusYList();
}
}
}
它似乎起作用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。