code: public static ApplicationContext getApplicationContext(final ITemplateContext context) {
          if (context == null) {
              return null;
          }
          // The ThymeleafEvaluationContext is set into the model by ThymeleafView (or wrapped by the SPEL evaluator)
          final IThymeleafEvaluationContext evaluationContext =
                  (IThymeleafEvaluationContext) context.getVariable(ThymeleafEvaluationContext.THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME);
          if (evaluationContext == null || !(evaluationContext instanceof ThymeleafEvaluationContext)) {
              return null;
          }
          // Only when the evaluation context is a ThymeleafEvaluationContext we can access the ApplicationContext.
          // The reason is it could also be a wrapper on another EvaluationContext implementation, created at the
          // SPELVariableExpressionEvaluator on-the-fly (where ApplicationContext is not available because there might
          // even not exist one), instead of at ThymeleafView (where we are sure we are executing a Spring View and
          // have an ApplicationContext available).
          return ((ThymeleafEvaluationContext)evaluationContext).getApplicationContext();
      }
docs: <p>
  Get the {@link ApplicationContext} from the Thymeleaf template context.
  </p>
  <p>
  Note that the application context might not be always accessible (and thus this method
  can return {@code null}). Application Context will be accessible when the template is being executed
  as a Spring View, or else when an object of class {@link ThymeleafEvaluationContext} has been
  explicitly set into the {@link ITemplateContext} {@code context} with variable name
  {@link ThymeleafEvaluationContext#THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME}.
  </p>
  
  @param context the template context.
  @return the application context, or {@code null} if it could not be accessed.