Browse Source

Enforce early initialization of CGLIB method proxies (for AOT processing)

For non-required method proxies, prefer regular reflective invocation instead.

See gh-29107
pull/29247/head
Juergen Hoeller 3 years ago
parent
commit
d873f60fef
  1. 2
      spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java
  2. 7
      spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java

2
spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java

@ -541,7 +541,7 @@ class ConfigurationClassEnhancer { @@ -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;

7
spring-core/src/main/java/org/springframework/cglib/proxy/MethodProxy.java

@ -55,6 +55,13 @@ public class MethodProxy { @@ -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;
}

Loading…
Cancel
Save