// Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
package jodd.proxetta;
import org.objectweb.asm.ClassReader;
import java.util.Map;
import java.util.HashMap;
import java.io.IOException;
/**
* Definition of a single proxy tells which {@link Proxy} implementation is
* applied on some target methods set.
*/
public abstract class ProxyDefinition {
protected Class<? extends Proxy> proxy;
protected ClassReader proxyClassReader;
protected ProxyDefinition(Class<? extends Proxy> proxy) {
this.proxy = proxy;
proxyClassReader = proxyClassReaderCache.get(proxy);
if (proxyClassReader == null) {
try {
proxyClassReader = new ClassReader(proxy.getName());
} catch (IOException ioex) {
throw new ProxettaException(ioex);
}
proxyClassReaderCache.put(proxy, proxyClassReader);
}
}
/**
* Returns class with proxy implementation.
*/
public Class<? extends Proxy> getProxy() {
return proxy;
}
/**
* Returns the proxy name. It is a simple class name of a proxy class.
*/
public String getProxyName() {
return proxy.getSimpleName();
}
/**
* Returns proxy class reader. They are cachned due to performances.
*/
public ClassReader getProxyClassReader() {
return proxyClassReader;
}
/**
* Returns <code>true</code> if provided package, class name and method signature
* should be wrapped with the proxy.
*/
public abstract boolean apply(MethodSignature msign);
// ---------------------------------------------------------------- cache
protected static Map<Class, ClassReader> proxyClassReaderCache = new HashMap<Class, ClassReader>();
}
|