当前位置: 首页 > 知识库问答 >
问题:

在Java中在一个单例类中缓存数据并在另一个单例类中使用

文志学
2023-03-14

我有一个类,它调用两个单例类FirstClass和SecondClass,如下所示。有没有一种方法可以在第二类中访问第一类中计算的数据。在这种情况下,我不想在第二类中进行外部服务调用,因为第一类已经调用了它。相反,只需在第二个数据函数中使用数据(存储在第一类函数中)。有什么方法可以做到。

public class CallingFunction() {
    List<String> generateData() {
    return Lists.newArrayList(new FirstClass(), new SecondClass())
}

@Singleton
public class FirstClass() extends interface {
    public String function() { 
    //operations. This function calls multiple services and stores ouput  to hashMap
    Map<String, String> hashedData = Maps.newHashMap();
    hashedData.put(dataFromAnotherService);
    return hashedData.get("abc");
    }
}

@Singleton
public class SecondClass() extends interface {
    public String function() { 
    //Use hashedData here instead of invoking the service again.
    //Other operations
    return "data";
    }
}

共有1个答案

劳鹏云
2023-03-14

是的,您可以通过以下逻辑来实现功能:

@Singleton
public class FirstClass() extends interface {
    private static FirstClass instance;
    private Map<String, String> hashedData = new HashMap<>();
    public String function() { 
        //operations. This function calls multiple services and stores ouput  to hashMap

        hashedData.put(dataFromAnotherService);
        return hashedData.get("abc");
    }
    public Map<String, String> getHashedData() {
        return this.hashedData;
    }
    public static FirstClass getInstance() {
         if (instance == null) instance = new FirstClass();
         return instance;
    }
}

@Singleton
public class SecondClass() extends interface {
    public String function() { 
         FirstClass instance = FirstClass.getInstance();

         // instance.getHashedData() here instead of invoking the service again.
         //Other operations
         return "data";
    }
}
 类似资料:
  • 我有一个类,它调用两个单例类FirstClass和SecondClass,如下所示。有没有一种方法可以在第二类中访问第一类中计算的数据。在这种情况下,我不想在第二类中进行外部服务调用,因为第一类已经调用了它。相反,只需在第二个数据函数中使用数据(存储在第一类函数中)。在Spring框架中有哪些方法可以做到?

  • A类是bean范围原型 B类是Bean范围 Singleton有A的getter和setter 在C类中,B是自动连线的,并设置A的对象 如何使用springAnnotations或XML在类D中使用B获取A的值

  • 问题内容: 今天在面试中,我被要求编写代码来确定在Java运行时类的多少实例退出。 我告诉他们,我们可以利用反思。请告诉我您是否有有效的方法。 问题答案: 我认为反思不会帮助您。有JVMTI(以及较早且现在已不存在的JVMPI)可用于分析堆并确定类的当前实例数。 一种编码的替代方法是向您要跟踪以下实例的类添加一个计数器: 这将跟踪曾经创建的实例数量,并且是线程安全的。要了解何时对实例进行垃圾回收,

  • ConfigServiceDAO.java ConfigServiceDAO中的DAOBuilder始终为null,这是有道理的,因为我的理解是,当类被手动实例化时,spring注入不会发生。如果我希望将ConfigServiceDAO保留为非spring组件,那么这里的解决方案是什么? ====Edit=====我知道可以将ConfigServiceDAO作为一个spring组件,并autowi

  • 我刚开始使用Java,到处搜索,但无论出于何种原因都无法找到解决方案。我的问题对我来说似乎很简单:我在同一个文件夹中有两个类,该文件夹是我的包,为了说明: 我需要在第2类中创建第1类的实例,但它就是不起作用。这是一个示例: 文件路径: 文件路径: 我得到这个错误 根据要求,完整的源代码:注:class1=ClientIndividual,class2=涉众 第一个文件 第二个文件 第三个文件(接口

  • 这是第一个代码: 那么这是它将在其中显示输出的主类: 很抱歉,如果我不清楚我的问题,但我想使用ArrayList,其中我将ArrayList存储在Person类中,我想使用公共字符串toString查看它,这样它将显示名称和年龄