spring的bean初始化策略

如果当前没有使用 GraalVM 镜像环境,AbstractAutowireCapableBeanFactory 中指定 instantiationStrategy 的值为 CglibSubclassingInstantiationStrategy,即默认创建对象使用的是 cglib。

java 复制代码
/**
	 * 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。

java 复制代码
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;
	}
}
相关推荐
JaguarJack17 分钟前
PHP 的异步编程 该怎么选择
后端·php·服务端
风象南18 分钟前
AI 写代码效果差?大多数人第一步就错了
人工智能·后端
BingoGo20 分钟前
PHP 的异步编程 该怎么选择
后端·php
焗猪扒饭10 小时前
redis stream用作消息队列极速入门
redis·后端·go
树獭非懒11 小时前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
NE_STOP12 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
IT_陈寒13 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
梦想很大很大14 小时前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
唐叔在学习14 小时前
就算没有服务器,我照样能够同步数据
后端·python·程序员