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;
	}
}
相关推荐
EmpressBoost6 分钟前
谷粒商城170缓存序列化报错
java·spring·缓存
fouryears_234179 分钟前
@PathVariable与@RequestParam的区别
java·spring·mvc·springboot
wxjlkh19 分钟前
powershell 批量测试ip 端口 脚本
java·服务器·前端
Heo20 分钟前
调用通义千问大模型实现流式对话
前端·javascript·后端
萌新小白的逆袭42 分钟前
《Maven 核心基础笔记(第一天)》
java·开发语言·spring
一念&44 分钟前
Java泛型
java
掉鱼的猫1 小时前
Solon 整合 LiteFlow 规则引擎:概念与实战
java·workflow
Java水解1 小时前
RabbitMQ用法的6种核心模式全面解析
后端·rabbitmq
她说..1 小时前
Stream API流学习总结
java
用户4099322502121 小时前
FastAPI的查询白名单和安全沙箱机制如何确保你的API坚不可摧?
前端·后端·github