Package org.springmodules.cache.key

Source Code of org.springmodules.cache.key.MultiKeyCodeGenerator

package org.springmodules.cache.key;

import java.io.Serializable;

import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.collections.keyvalue.MultiKey;

/**
*
* A {@link CacheKeyGenerator} based on commons collections.
*
* @author David J. M. Karlsen <david@davidkarlsen.com>
*
*/
public class MultiKeyCodeGenerator
    implements CacheKeyGenerator
{
    private final boolean cloneKeys;
   
    /**
     * @param cloneKeys set to true to clone keys to assure they stick immutable.
     */
    public MultiKeyCodeGenerator( boolean cloneKeys )
    {
        this.cloneKeys = cloneKeys;
    }
   
    /**
     * Equals <code>this(true)</code>
     */
    public MultiKeyCodeGenerator()
    {
        this( true );
    }
   
    /**
     * Generates a key based on {@linkplain MultiKey}.
     * {@inheritDoc}
     * @return a {@link MultiKey} co-variant of {@link Serializable}.
     */
    public MultiKey generateKey( MethodInvocation methodInvocation )
    {
        Integer hashCode = System.identityHashCode( methodInvocation.getMethod() );
        Object[] arguments = methodInvocation.getArguments();
        Object[] keys = new Object[ arguments.length + 1 ];
        keys[0] = hashCode;
        System.arraycopy( arguments, 0, keys, 1, arguments.length );
        MultiKey multiKey = new MultiKey( keys, cloneKeys );
       
        return multiKey;
    }

}
TOP

Related Classes of org.springmodules.cache.key.MultiKeyCodeGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.