|
26 | 26 | import org.apache.commons.logging.LogFactory;
|
27 | 27 |
|
28 | 28 | import org.springframework.aop.scope.ScopedProxyFactoryBean;
|
| 29 | +import org.springframework.aot.AotDetector; |
29 | 30 | import org.springframework.asm.Opcodes;
|
30 | 31 | import org.springframework.asm.Type;
|
31 | 32 | import org.springframework.beans.factory.BeanDefinitionStoreException;
|
@@ -138,26 +139,22 @@ private Enhancer newEnhancer(Class<?> configSuperClass, @Nullable ClassLoader cl
|
138 | 139 | Enhancer enhancer = new Enhancer();
|
139 | 140 | if (classLoader != null) {
|
140 | 141 | enhancer.setClassLoader(classLoader);
|
| 142 | + if (classLoader instanceof SmartClassLoader smartClassLoader && |
| 143 | + smartClassLoader.isClassReloadable(configSuperClass)) { |
| 144 | + enhancer.setUseCache(false); |
| 145 | + } |
141 | 146 | }
|
142 | 147 | enhancer.setSuperclass(configSuperClass);
|
143 | 148 | enhancer.setInterfaces(new Class<?>[] {EnhancedConfiguration.class});
|
144 | 149 | enhancer.setUseFactory(false);
|
145 | 150 | enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
|
146 |
| - enhancer.setAttemptLoad(!isClassReloadable(configSuperClass, classLoader)); |
| 151 | + enhancer.setAttemptLoad(enhancer.getUseCache() && AotDetector.useGeneratedArtifacts()); |
147 | 152 | enhancer.setStrategy(new BeanFactoryAwareGeneratorStrategy(classLoader));
|
148 | 153 | enhancer.setCallbackFilter(CALLBACK_FILTER);
|
149 | 154 | enhancer.setCallbackTypes(CALLBACK_FILTER.getCallbackTypes());
|
150 | 155 | return enhancer;
|
151 | 156 | }
|
152 | 157 |
|
153 |
| - /** |
154 |
| - * Checks whether the given configuration class is reloadable. |
155 |
| - */ |
156 |
| - private boolean isClassReloadable(Class<?> configSuperClass, @Nullable ClassLoader classLoader) { |
157 |
| - return (classLoader instanceof SmartClassLoader smartClassLoader && |
158 |
| - smartClassLoader.isClassReloadable(configSuperClass)); |
159 |
| - } |
160 |
| - |
161 | 158 | /**
|
162 | 159 | * Uses enhancer to generate a subclass of superclass,
|
163 | 160 | * ensuring that callbacks are registered for the new subclass.
|
@@ -548,7 +545,7 @@ private Object createCglibProxyForFactoryBean(Object factoryBean,
|
548 | 545 | Enhancer enhancer = new Enhancer();
|
549 | 546 | enhancer.setSuperclass(factoryBean.getClass());
|
550 | 547 | enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
|
551 |
| - enhancer.setAttemptLoad(true); |
| 548 | + enhancer.setAttemptLoad(AotDetector.useGeneratedArtifacts()); |
552 | 549 | enhancer.setCallbackType(MethodInterceptor.class);
|
553 | 550 |
|
554 | 551 | // Ideally create enhanced FactoryBean proxy without constructor side effects,
|
|
0 commit comments