From d873f60fefe1399aaed0621e149568faf0845ed8 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 3 Oct 2022 13:22:49 +0200 Subject: [PATCH] Enforce early initialization of CGLIB method proxies (for AOT processing) For non-required method proxies, prefer regular reflective invocation instead. See gh-29107 --- .../context/annotation/ConfigurationClassEnhancer.java | 2 +- .../java/org/springframework/cglib/proxy/MethodProxy.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java index e4d0d862c5b..69c3d1ce956 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java @@ -541,7 +541,7 @@ class ConfigurationClassEnhancer { if (method.getName().equals("getObject") && args.length == 0) { return beanFactory.getBean(beanName); } - return proxy.invoke(factoryBean, args); + return method.invoke(factoryBean, args); }); return fbProxy; diff --git a/spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java b/spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java index fc0f63bb0a8..afa6a2582b3 100644 --- a/spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java +++ b/spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java @@ -55,6 +55,13 @@ public class MethodProxy { proxy.sig1 = new Signature(name1, desc); proxy.sig2 = new Signature(name2, desc); proxy.createInfo = new CreateInfo(c1, c2); + + // SPRING PATCH BEGIN: early initialization for overridden methods on subclasses + if (!c1.isInterface()) { + proxy.init(); + } + // SPRING PATCH END + return proxy; }