我正在使用guava-libraries LoadingCache来缓存我的应用程序中的类。
这是我提出的课程。
public class MethodMetricsHandlerCache {
private Object targetClass;
private Method method;
private Configuration config;
private LoadingCache<String, MethodMetricsHandler> handlers = CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
new CacheLoader<String, MethodMetricsHandler>() {
public MethodMetricsHandler load(String identifier) {
return createMethodMetricsHandler(identifier);
}
});
private MethodMetricsHandler createMethodMetricsHandler(String identifier) {
return new MethodMetricsHandler(targetClass, method, config);
}
public void setTargetClass(Object targetClass) {
this.targetClass = targetClass;
}
public void setMethod(Method method) {
this.method = method;
}
public void setConfig(Configuration config) {
this.config = config;
}
public MethodMetricsHandler getHandler(String identifier) throws ExecutionException {
return handlers.get(identifier);
}
我正在使用此类来缓存MethodMetricsHandler
...
private static MethodMetricsHandlerCache methodMetricsHandlerCache = new MethodMetricsHandlerCache();
...
MethodMetricsHandler handler = getMethodMetricsHandler(targetClass, method, config);
private MethodMetricsHandler getMethodMetricsHandler(Object targetClass, Method method, Configuration config) throws ExecutionException {
String identifier = targetClass.getClass().getCanonicalName() + "." + method.getName();
methodMetricsHandlerCache.setTargetClass(targetClass);
methodMetricsHandlerCache.setMethod(method);
methodMetricsHandlerCache.setConfig(config);
return methodMetricsHandlerCache.getHandler(identifier);
}
我的问题:
这是否会创建一个以标识符键入的MethodMetricHandler类的缓存(之前没有使用过,只需要进行健全性检查)。
还有更好的方法吗?如果我不缓存,我将为给定的标识符提供相同MethodMetricHandler的多个实例(数百个)?
答案 0 :(得分:0)
是的,它确实创建了MethodMetricsHandler对象的缓存。这种方法通常都不错,但是如果你描述了你的用例,我可能会说更多,因为这个解决方案很不寻常。你已经部分重新设计了工厂模式。
还要考虑一些建议:
Object
。您可能希望改为Class<?>
。