ProxyDefinition.java :  » Development » jodd » jodd » proxetta » Java Open Source

Java Open Source » Development » jodd 
jodd » jodd » proxetta » ProxyDefinition.java
// 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>();


}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.