类 SpelCompiler
- 所有已实现的接口:
Opcodes
The SpelCompiler is not currently handling all expression types but covers many of the common cases. The framework is extensible to cover more cases in the future. For absolute maximum speed there is *no checking* in the compiled code. The compiled version of the expression uses information learned during interpreted runs of the expression when it generates the byte code. For example if it knows that a particular property dereference always seems to return a Map then it will generate byte code that expects the result of the property dereference to be a Map. This ensures maximal performance but should the dereference result in something other than a map, the compiled expression will fail - like a ClassCastException would occur if passing data of an unexpected type in a regular Java program.
Due to the lack of checking there are likely some expressions that should never be
compiled, for example if an expression is continuously dealing with different types of
data. Due to these cases the compiler is something that must be selectively turned on
for an associated SpelExpressionParser (through the SpelParserConfiguration
object), it is not on by default.
Individual expressions can be compiled by calling SpelCompiler.compile(expression).
- 从以下版本开始:
- 4.0
- 作者:
- Andy Clement, Juergen Hoeller, Harry Yang
-
字段概要
字段修饰符和类型字段说明private static final ConcurrentReferenceHashMap<ClassLoader,SpelCompiler> private static final Loggerprivate final AtomicInteger从类继承的字段 cn.taketoday.bytecode.BytecodeCompiler
childClassLoader从接口继承的字段 cn.taketoday.bytecode.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JAVA_VERSION, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PRIVATE_FINAL_STATIC, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, SWITCH_STYLE_HASH, SWITCH_STYLE_HASHONLY, SWITCH_STYLE_TRIE, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V9 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明static booleancompile(Expression expression) Request that an attempt is made to compile the specified expression.compile(SpelNodeImpl expression) Attempt compilation of the supplied expression.private Class<? extends CompiledExpression>createExpressionClass(SpelNodeImpl expressionToCompile) Generate the class that encapsulates the compiled expression and define it.static SpelCompilergetCompiler(ClassLoader classLoader) Factory method for compiler instances.private intstatic voidrevertToInterpreted(Expression expression) Request to revert to the interpreter for expression evaluation.从类继承的方法 cn.taketoday.bytecode.BytecodeCompiler
compile, compile, loadClass
-
字段详细资料
-
logger
-
compilers
-
suffixId
-
-
构造器详细资料
-
SpelCompiler
-
-
方法详细资料
-
compile
Attempt compilation of the supplied expression. A check is made to see if it is compilable before compilation proceeds. The check involves visiting all the nodes in the expression AST and ensuring enough state is known about them that bytecode can be generated for them.- 参数:
expression- the expression to compile- 返回:
- an instance of the class implementing the compiled expression,
or
nullif compilation is not possible
-
getNextSuffix
private int getNextSuffix() -
createExpressionClass
@Nullable private Class<? extends CompiledExpression> createExpressionClass(SpelNodeImpl expressionToCompile) Generate the class that encapsulates the compiled expression and define it. The generated class will be a subtype of CompiledExpression.- 参数:
expressionToCompile- the expression to be compiled- 返回:
- the expression call, or
nullif the decision was to opt out of compilation during code generation
-
getCompiler
Factory method for compiler instances. The returned SpelCompiler will attach a class loader as the child of the given class loader and this child will be used to load compiled expressions.- 参数:
classLoader- the ClassLoader to use as the basis for compilation- 返回:
- a corresponding SpelCompiler instance
-
compile
Request that an attempt is made to compile the specified expression. It may fail if components of the expression are not suitable for compilation or the data types involved are not suitable for compilation. Used for testing.- 参数:
expression- the expression to compile- 返回:
trueif the expression was successfully compiled,falseotherwise
-
revertToInterpreted
Request to revert to the interpreter for expression evaluation. Any compiled form is discarded but can be recreated by later recompiling again.- 参数:
expression- the expression
-