Revision of SpelCompiler support, resolving a subpackage cycle through moving CodeFlow and CompilablePropertyAccessor to the main spel package
Also contains explicit ClassLoader management, passed through StandardBeanExpressionResolver and SpelParserConfiguration to SpelCompiler lookup. Issue: SPR-10943
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* 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.
|
||||
@@ -27,6 +27,7 @@ import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
import org.springframework.expression.ParserContext;
|
||||
import org.springframework.expression.spel.SpelParserConfiguration;
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
import org.springframework.expression.spel.support.StandardTypeConverter;
|
||||
@@ -58,7 +59,7 @@ public class StandardBeanExpressionResolver implements BeanExpressionResolver {
|
||||
|
||||
private String expressionSuffix = DEFAULT_EXPRESSION_SUFFIX;
|
||||
|
||||
private ExpressionParser expressionParser = new SpelExpressionParser();
|
||||
private ExpressionParser expressionParser;
|
||||
|
||||
private final Map<String, Expression> expressionCache = new ConcurrentHashMap<String, Expression>(256);
|
||||
|
||||
@@ -81,6 +82,23 @@ public class StandardBeanExpressionResolver implements BeanExpressionResolver {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create a new {@code StandardBeanExpressionResolver} with default settings.
|
||||
*/
|
||||
public StandardBeanExpressionResolver() {
|
||||
this.expressionParser = new SpelExpressionParser();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new {@code StandardBeanExpressionResolver} with the given bean class loader,
|
||||
* using it as the basis for expression compilation.
|
||||
* @param beanClassLoader the factory's bean class loader
|
||||
*/
|
||||
public StandardBeanExpressionResolver(ClassLoader beanClassLoader) {
|
||||
this.expressionParser = new SpelExpressionParser(new SpelParserConfiguration(null, beanClassLoader));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the prefix that an expression string starts with.
|
||||
* The default is "#{".
|
||||
|
||||
@@ -548,7 +548,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
|
||||
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {
|
||||
// Tell the internal bean factory to use the context's class loader etc.
|
||||
beanFactory.setBeanClassLoader(getClassLoader());
|
||||
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver());
|
||||
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));
|
||||
beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));
|
||||
|
||||
// Configure the bean factory with context callbacks.
|
||||
|
||||
Reference in New Issue
Block a user