java—将Springbean注入enum并在enum函数接口内调用它

atmip9wb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(517)

好吧,我想我正在努力实现更多,但我想为我的应用程序中的所有字典值创建一个聚合器类。因此,我创建了一个枚举,它将有两个参数-第一个是字典名,第二个是 Supplier . 我去了 Supplier 因为为每个字典提供的值的计算方式不同。到目前为止我想到了这个:

  1. public enum DictionaryAggregator {
  2. STATUS_X("statusX", StatusX::getDictionary),
  3. STATUS_Y("statusY", new Supplier<Map<String, ?>>() {
  4. @Override
  5. public Map<String, ?> get() {
  6. return <would like to reference to statusYCache which is inside DictionaryAggregatorServiceInjector>;
  7. }
  8. });
  9. private final String dictionaryName;
  10. private final Supplier<Map<String, ?>> dictionary;
  11. public String getDictionaryName() {
  12. return dictionaryName;
  13. }
  14. public Supplier<Map<String, ?>> getDictionary() {
  15. return dictionary;
  16. }
  17. DictionaryAggregator(String dictionaryName, Supplier<Map<String, ?>> dictionary) {
  18. this.dictionaryName = dictionaryName;
  19. this.dictionary = dictionary;
  20. }
  21. @Component
  22. static class DictionaryAggregatorServiceInjector {
  23. @Autowired
  24. private StatusYService statusYService;
  25. }
  26. }

但无论我尝试了什么,我都想不出一个办法,我怎么能从中提供价值呢 StatusYCache 服务。理想情况下,我想实现的是 Supplier 为了 STATUS_Y 可以很容易地从 StatusYService .

d6kp6zgx

d6kp6zgx1#

我想我应该多用脑子。我想到了这个:

  1. public enum DictionaryAggregator {
  2. STATUS_X("statusX", StatusX::getDictionary),
  3. STATUS_Y("statusY", new Supplier<Map<String, ?>>() {
  4. @Override
  5. public Map<String, ?> get() {
  6. return new StatusYDictionaryClass(DictionaryAggregatorServiceInjector.shipmentStatusVos).getDictionary();
  7. }
  8. });
  9. private final String dictionaryName;
  10. private final Supplier<Map<String, ?>> dictionary;
  11. public String getDictionaryName() {
  12. return dictionaryName;
  13. }
  14. public Supplier<Map<String, ?>> getDictionary() {
  15. return dictionary;
  16. }
  17. DictionaryAggregator(String dictionaryName, Supplier<Map<String, ?>> dictionary) {
  18. this.dictionaryName = dictionaryName;
  19. this.dictionary = dictionary;
  20. }
  21. @Component
  22. static class DictionaryAggregatorServiceInjector {
  23. static List<StatusYObj> statusYList;
  24. @Autowired
  25. public StatusYService statusYService;
  26. @PostConstruct
  27. public void init() {
  28. statusYList = statusYService.getStatusYList();
  29. }
  30. }
  31. }

它似乎起作用了。

展开查看全部

相关问题