From 43b2a40343be4d4a2ad12cf4dbdc0a76ddeaedbf Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Fri, 6 Mar 2009 00:38:30 +0000 Subject: [PATCH] Initial work to ensure CGLIB classes are not eagerly loaded (CGLIB should only be required if Spring users wish to process @Configuration classes) --- .../springframework/config/java/FactoryMethod.java | 2 +- .../AbstractConfigurationClassProcessor.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/FactoryMethod.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/FactoryMethod.java index ab1e7107855..cd57b3207cc 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/FactoryMethod.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/FactoryMethod.java @@ -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 interceptor() default NoOpInterceptor.class; + Class interceptor(); /** * Optionally specifies any {@link Validator} types capable of validating the syntax of diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/support/AbstractConfigurationClassProcessor.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/support/AbstractConfigurationClassProcessor.java index c19d7db90e7..2991397adf4 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/support/AbstractConfigurationClassProcessor.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/support/AbstractConfigurationClassProcessor.java @@ -1,5 +1,7 @@ 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();