private GroovyPageTemplate createTemplateFromPrecompiled(String originalUri, String uri) {
    if (precompiledGspMap != null) {
      GroovyPageMetaInfo meta = precompiledCache.get(uri);
      if (meta != null) {
        return new GroovyPageTemplate(meta);
      }
      String gspClassName = precompiledGspMap.get(uri);
      if (gspClassName != null) {
        Class<GroovyPage> gspClass = null;
        try {
          gspClass =
              (Class<GroovyPage>)
                  Class.forName(gspClassName, true, Thread.currentThread().getContextClassLoader());
        } catch (ClassNotFoundException e) {
          LOG.warn(
              "Cannot load class " + gspClassName + ". Resuming on non-precompiled implementation.",
              e);
        }
        if (gspClass != null) {
          meta = new GroovyPageMetaInfo(gspClass);
          meta.setJspTagLibraryResolver(jspTagLibraryResolver);
          meta.setTagLibraryLookup(tagLibraryLookup);
          if (LOG.isDebugEnabled()) {
            LOG.debug(
                "Adding GSP class GroovyPageMetaInfo in cache for uri "
                    + uri
                    + " classname is "
                    + gspClassName);
          }
          precompiledCache.put(uri, meta);
          precompiledCache.put(originalUri, meta);
          return new GroovyPageTemplate(meta);
        }
      }
      if (precompiledGspMap.size() > 0) {}

      if (LOG.isDebugEnabled()) {
        LOG.debug("No precompiled template found for uri '" + uri + "'");
      }
    }
    return null;
  }
 public void afterPropertiesSet() {
   if (classLoader == null) {
     this.classLoader = initGroovyClassLoader(Thread.currentThread().getContextClassLoader());
   }
 }