![JAR search and dependency download from the Maven repository](/logo.png)
com.maxifier.mxcache.proxy.MxProxyGenerator Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2014 Maxifier Ltd. All Rights Reserved.
*/
package com.maxifier.mxcache.proxy;
import gnu.trove.map.hash.THashMap;
import java.util.Map;
/**
* @author Alexander Kochurov ([email protected])
*/
public final class MxProxyGenerator {
private static final Map PROXY_MAP = new THashMap();
private static final Map GENERIC_PROXY_MAP = new THashMap();
private MxProxyGenerator() {
}
/**
* Creates a proxy factory for given interface.
*
* @param sourceClass source interface
* @param containerClass container type interface
* @return created factory
*/
public static synchronized > MxProxyFactory getProxyFactory(Class sourceClass, Class containerClass) {
MxProxyFactory proxy = new MxProxyFactory(sourceClass, containerClass);
@SuppressWarnings({"unchecked"})
MxProxyFactory oldProxy = PROXY_MAP.get(proxy);
if (oldProxy == null) {
PROXY_MAP.put(proxy, proxy);
return proxy;
}
return oldProxy;
}
/**
* Creates generic proxy factory of given type.
* The difference between usual and generic proxy factory is that proxies created by generic proxy will implement
* not only target interface but also all its subinterfaces that initial object has.
*
* @param sourceClass source interface
* @param containerClass container type interface
* @return created factory
*/
public static synchronized > MxGenericProxyFactory getGenericProxyFactory(Class sourceClass, Class containerClass) {
MxGenericProxyFactory proxy = new MxGenericProxyFactory(sourceClass, containerClass);
@SuppressWarnings({"unchecked"})
MxGenericProxyFactory oldProxy = GENERIC_PROXY_MAP.get(proxy);
if (oldProxy == null) {
GENERIC_PROXY_MAP.put(proxy, proxy);
return proxy;
}
return oldProxy;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy