code: @Override
      public Serializable generateKey(final MethodInvocation methodInvocation) {
          //Determine the tareted CachableMethod
          final CachableMethod cachableMethod = this.resolveCacheableMethod(methodInvocation);
  
          //Use the resolved cachableMethod to determine the seed Map and then get the hash of the key elements
          final Object[] methodArguments = methodInvocation.getArguments();
          final Map<String, Object> seed = this.getSeed(methodArguments, cachableMethod);
          final Integer keyHashCode = this.getKeyHash(seed);
  
          //If no code generated return null
          if (keyHashCode == null) {
              if (this.logger.isDebugEnabled()) {
                  this.logger.debug("No cache key generated for MethodInvocation='" + methodInvocation + "'");
              }
              return null;
          }
  
          //Calculate the hashCode and checkSum
          final HashCodeCalculator hashCodeCalculator = new HashCodeCalculator();
          hashCodeCalculator.append(keyHashCode);
  
          //Assemble the serializable key object
          final long checkSum = hashCodeCalculator.getCheckSum();
          final int hashCode = hashCodeCalculator.getHashCode();
          final HashCodeCacheKey hashCodeCacheKey = new HashCodeCacheKey(checkSum, hashCode);
  
          if (this.logger.isDebugEnabled()) {
              this.logger.debug("Generated cache key '" + hashCodeCacheKey + "' for MethodInvocation='" + methodInvocation + "'");
          }
          return hashCodeCacheKey;
      }
docs: /* (non-Javadoc)
  @see org.springmodules.cache.key.CacheKeyGenerator#generateKey(org.aopalliance.intercept.MethodInvocation)