提交 43b2a403 编写于 作者: C Chris Beams

Initial work to ensure CGLIB classes are not eagerly loaded (CGLIB should only...

Initial work to ensure CGLIB classes are not eagerly loaded (CGLIB should only be required if Spring users wish to process @Configuration classes)
上级 93b558b1
......@@ -56,7 +56,7 @@ public @interface FactoryMethod {
* Specifies what interceptor should be used when processing this {@link FactoryMethod}.
* Defaults to {@link NoOpInterceptor} which does nothing.
*/
Class<? extends MethodInterceptor> interceptor() default NoOpInterceptor.class;
Class<? extends MethodInterceptor> interceptor();
/**
* Optionally specifies any {@link Validator} types capable of validating the syntax of
......
package org.springframework.config.java.support;
import static org.springframework.util.StringUtils.*;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.config.java.ConfigurationModel;
......@@ -7,6 +9,8 @@ import org.springframework.config.java.internal.parsing.ConfigurationParser;
public abstract class AbstractConfigurationClassProcessor {
static String CGLIB_PACKAGE = "net.sf.cglib.proxy";
protected abstract BeanDefinitionRegistry getConfigurationBeanDefinitions(boolean includeAbstractBeanDefs);
protected abstract ConfigurationParser createConfigurationParser();
......@@ -19,13 +23,21 @@ public abstract class AbstractConfigurationClassProcessor {
if(configBeanDefs.getBeanDefinitionCount() == 0)
return configBeanDefs; // nothing to do - don't waste any more cycles
// TODO: the location of this cglib check is temporary, pending removal of the
// @FactoryMethod meta-annotation indirection
if(Package.getPackage(CGLIB_PACKAGE) == null)
throw new RuntimeException("CGLIB is required to process @Configuration classes. " +
"Either add CGLIB v2.2.3 to the classpath or remove the following " +
"@Configuration bean definitions: ["
+ arrayToCommaDelimitedString(configBeanDefs.getBeanDefinitionNames()) + "]");
ConfigurationModel configModel = createConfigurationModelFor(configBeanDefs);
validateModel(configModel);
return renderModelAsBeanDefinitions(configModel);
}
private ConfigurationModel createConfigurationModelFor(BeanDefinitionRegistry configBeanDefinitions) {
ConfigurationParser parser = createConfigurationParser();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册