![JAR search and dependency download from the Maven repository](/logo.png)
com.maxifier.mxcache.proxy.WeakProxyFactory Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2014 Maxifier Ltd. All Rights Reserved.
*/
package com.maxifier.mxcache.proxy;
import java.lang.ref.WeakReference;
/**
* @author Alexander Kochurov ([email protected])
*/
public class WeakProxyFactory implements ProxyFactory {
public static class WeakResolvable implements Resolvable {
private static final Object NON_INITIALIZED = new Object();
private final Resolvable resolvable;
private WeakReference cached;
public WeakResolvable(Resolvable resolvable) {
this.resolvable = resolvable;
}
@Override
public T getValue() {
Object value = load();
if (value == NON_INITIALIZED) {
T t = resolvable.getValue();
save(t);
return t;
}
//noinspection unchecked
return (T)value;
}
private synchronized Object load() {
if (cached == null) {
return NON_INITIALIZED;
}
T v = cached.get();
if (v == null) {
return NON_INITIALIZED;
}
return v;
}
private synchronized void save(T value) {
cached = new WeakReference(value);
}
}
@Override
public Value proxy(Class expected, Resolvable resolvable) {
//noinspection RedundantCast
return (Value) MxProxyGenerator.getProxyFactory(expected, WeakResolvable.class).createProxy(new WeakResolvable(resolvable));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy