/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.expression.spel; import org.springframework.core.SpringProperties; /** * Configuration object for the SpEL expression parser. * * @author Juergen Hoeller * @author Phillip Webb * @author Andy Clement * @since 3.0 * @see org.springframework.expression.spel.standard.SpelExpressionParser#SpelExpressionParser(SpelParserConfiguration) */ public class SpelParserConfiguration { private static final SpelCompilerMode defaultCompilerMode; static { String compilerMode = SpringProperties.getProperty("spring.expression.compiler.mode"); defaultCompilerMode = (compilerMode != null ? SpelCompilerMode.valueOf(compilerMode.toUpperCase()) : SpelCompilerMode.OFF); } private final SpelCompilerMode compilerMode; private final ClassLoader compilerClassLoader; private final boolean autoGrowNullReferences; private final boolean autoGrowCollections; private final int maximumAutoGrowSize; /** * Create a new {@code SpelParserConfiguration} instance with default settings. */ public SpelParserConfiguration() { this(null, null, false, false, Integer.MAX_VALUE); } /** * Create a new {@code SpelParserConfiguration} instance. * @param compilerMode the compiler mode for the parser * @param compilerClassLoader the ClassLoader to use as the basis for expression compilation */ public SpelParserConfiguration(SpelCompilerMode compilerMode, ClassLoader compilerClassLoader) { this(compilerMode, compilerClassLoader, false, false, Integer.MAX_VALUE); } /** * Create a new {@code SpelParserConfiguration} instance. * @param autoGrowNullReferences if null references should automatically grow * @param autoGrowCollections if collections should automatically grow * @see #SpelParserConfiguration(boolean, boolean, int) */ public SpelParserConfiguration(boolean autoGrowNullReferences, boolean autoGrowCollections) { this(null, null, autoGrowNullReferences, autoGrowCollections, Integer.MAX_VALUE); } /** * Create a new {@code SpelParserConfiguration} instance. * @param autoGrowNullReferences if null references should automatically grow * @param autoGrowCollections if collections should automatically grow * @param maximumAutoGrowSize the maximum size that the collection can auto grow */ public SpelParserConfiguration(boolean autoGrowNullReferences, boolean autoGrowCollections, int maximumAutoGrowSize) { this(null, null, autoGrowNullReferences, autoGrowCollections, maximumAutoGrowSize); } /** * Create a new {@code SpelParserConfiguration} instance. * @param compilerMode the compiler mode that parsers using this configuration object should use * @param compilerClassLoader the ClassLoader to use as the basis for expression compilation * @param autoGrowNullReferences if null references should automatically grow * @param autoGrowCollections if collections should automatically grow * @param maximumAutoGrowSize the maximum size that the collection can auto grow */ public SpelParserConfiguration(SpelCompilerMode compilerMode, ClassLoader compilerClassLoader, boolean autoGrowNullReferences, boolean autoGrowCollections, int maximumAutoGrowSize) { this.compilerMode = (compilerMode != null ? compilerMode : defaultCompilerMode); this.compilerClassLoader = compilerClassLoader; this.autoGrowNullReferences = autoGrowNullReferences; this.autoGrowCollections = autoGrowCollections; this.maximumAutoGrowSize = maximumAutoGrowSize; } /** * @return the configuration mode for parsers using this configuration object */ public SpelCompilerMode getCompilerMode() { return this.compilerMode; } /** * @return the ClassLoader to use as the basis for expression compilation */ public ClassLoader getCompilerClassLoader() { return this.compilerClassLoader; } /** * @return {@code true} if {@code null} references should be automatically grown */ public boolean isAutoGrowNullReferences() { return this.autoGrowNullReferences; } /** * @return {@code true} if collections should be automatically grown */ public boolean isAutoGrowCollections() { return this.autoGrowCollections; } /** * @return the maximum size that a collection can auto grow */ public int getMaximumAutoGrowSize() { return this.maximumAutoGrowSize; } }