我的要求:
我只想加载一次服务类(或者在内存中长时间持续2小时)
我的问题:
如何检查此服务类仅加载一次?
如果每次发出请求时都加载它,那么它们是否有任何方法可以保留在内存中?
这是我的服务类的代码
package com.example; import com.example.spi.Multiplication; import java.util.Iterator; import java.util.ServiceLoader; public class MultiplicationService implements Multiplication{ private static MultiplicationService service; private ServiceLoader loader; public static int no=0; private MultiplicationService() { loader = ServiceLoader.load(Multiplication.class); } public static synchronized MultiplicationService getInstance() { if (service == null) { service = new MultiplicationService(); } return service; } public int getMultiplication(int a,int b){ int result = 0; try { Iterator multiply = loader.iterator(); while (result == 0 && multiply.hasNext()) { Multiplication d = multiply.next(); result = d.getMultiplication(a,b); System.out.println("Result is : "+ result); } } catch (Exception serviceError) { result = 0; serviceError.printStackTrace(); } return result; } }
由于
答案 0 :(得分:2)
转到 Spring 创建一个bean条目并保持单例[默认情况下] 当初始化上下文时,它将创建该类的一个对象,然后它将不会触及该类,并且您的目的将得到解决。
答案 1 :(得分:2)
您可以实施singleton pattern。一种选择是使用枚举:
public enum Service {
INSTANCE;
private ThirdPartyService service = new ThirdPartyService();
public ThirdPartyService getService() {
return service;
}
}
但是不要过度使用该模式,因为这会使您的代码难以进行单元测试。
答案 2 :(得分:0)
您还可以查看OSGi,它有一个服务模型,并会为您处理所有课程加载。您还可以combine it with Spring从两个世界中获益。