Skip to content

Commit 2b017fe

Browse files
committed
Apply original ClassLoader in AbstractAdvisingBeanPostProcessor as well
See gh-26601
1 parent 61cdd64 commit 2b017fe

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

spring-aop/src/main/java/org/springframework/aop/framework/AbstractAdvisingBeanPostProcessor.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@
2222
import org.springframework.aop.Advisor;
2323
import org.springframework.aop.support.AopUtils;
2424
import org.springframework.beans.factory.config.BeanPostProcessor;
25+
import org.springframework.core.SmartClassLoader;
2526
import org.springframework.lang.Nullable;
2627

2728
/**
@@ -89,7 +90,13 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
8990
}
9091
proxyFactory.addAdvisor(this.advisor);
9192
customizeProxyFactory(proxyFactory);
92-
return proxyFactory.getProxy(getProxyClassLoader());
93+
94+
// Use original ClassLoader if bean class not locally loaded in overriding class loader
95+
ClassLoader classLoader = getProxyClassLoader();
96+
if (classLoader instanceof SmartClassLoader && classLoader != bean.getClass().getClassLoader()) {
97+
classLoader = ((SmartClassLoader) classLoader).getOriginalClassLoader();
98+
}
99+
return proxyFactory.getProxy(classLoader);
93100
}
94101

95102
// No proxy needed.

spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -459,11 +459,12 @@ protected Object createProxy(Class<?> beanClass, @Nullable String beanName,
459459
proxyFactory.setPreFiltered(true);
460460
}
461461

462-
ClassLoader targetClassLoader = getProxyClassLoader();
463-
if (targetClassLoader instanceof SmartClassLoader && targetClassLoader != beanClass.getClassLoader()) {
464-
targetClassLoader = ((SmartClassLoader) targetClassLoader).getOriginalClassLoader();
462+
// Use original ClassLoader if bean class not locally loaded in overriding class loader
463+
ClassLoader classLoader = getProxyClassLoader();
464+
if (classLoader instanceof SmartClassLoader && classLoader != beanClass.getClassLoader()) {
465+
classLoader = ((SmartClassLoader) classLoader).getOriginalClassLoader();
465466
}
466-
return proxyFactory.getProxy(targetClassLoader);
467+
return proxyFactory.getProxy(classLoader);
467468
}
468469

469470
/**

0 commit comments

Comments
 (0)