如果当前没有使用 GraalVM 镜像环境,AbstractAutowireCapableBeanFactory 中指定 instantiationStrategy 的值为 CglibSubclassingInstantiationStrategy,即默认创建对象使用的是 cglib。
- /**
- * Create a new AbstractAutowireCapableBeanFactory.
- */
- public AbstractAutowireCapableBeanFactory() {
- super();
- ignoreDependencyInterface(BeanNameAware.class);
- ignoreDependencyInterface(BeanFactoryAware.class);
- ignoreDependencyInterface(BeanClassLoaderAware.class);
- if (NativeDetector.inNativeImage()) {
- this.instantiationStrategy = new SimpleInstantiationStrategy();
- }
- else {
- this.instantiationStrategy = new CglibSubclassingInstantiationStrategy();
- }
- }
GraalVM 原生镜像通过启动时设置参数指定 org.graalvm.nativeimage.imagecode,不指定默认为 false。
- public abstract class NativeDetector {
-
- // See https://github.com/oracle/graal/blob/master/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/ImageInfo.java
- private static final boolean imageCode = (System.getProperty("org.graalvm.nativeimage.imagecode") != null);
-
- /**
- * Returns {@code true} if invoked in the context of image building or during image runtime, else {@code false}.
- */
- public static boolean inNativeImage() {
- return imageCode;
- }
- }