当 MongoMappingContext 创建实体时,Spring Boot 3.0.3 中仍然存在“使用已弃用的 '-debug' 后备参数名称解​​析”警告

Cha*_*ter 0 java spring spring-data-mongodb spring-boot

我正在使用 Spring Boot 3.0.3、Spring Core 6.0.5 和 Spring Data MongoDB 4.0.2。我看到许多以下形式的警告消息

ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: <your mongo entity here>
Run Code Online (Sandbox Code Playgroud)

在消息源插入断点,我得到以下堆栈跟踪:

apply:-1, LocalVariableTableParameterNameDiscoverer$$Lambda$1162/0x00000008013cfa98 (org.springframework.core)
computeIfAbsent:1708, ConcurrentHashMap (java.util.concurrent)
doGetParameterNames:96, LocalVariableTableParameterNameDiscoverer (org.springframework.core)
getParameterNames:90, LocalVariableTableParameterNameDiscoverer (org.springframework.core)
getParameterNames:67, PrioritizedParameterNameDiscoverer (org.springframework.core)
buildPreferredConstructor:236, PreferredConstructorDiscoverer$Discoverers (org.springframework.data.mapping.model)
discover:118, PreferredConstructorDiscoverer$Discoverers$1 (org.springframework.data.mapping.model)
discover:82, PreferredConstructorDiscoverer (org.springframework.data.mapping.model)
discover:81, InstanceCreatorMetadataDiscoverer (org.springframework.data.mapping.model)
<init>:113, BasicPersistentEntity (org.springframework.data.mapping.model)
<init>:84, BasicMongoPersistentEntity (org.springframework.data.mongodb.core.mapping)
createPersistentEntity:88, MongoMappingContext (org.springframework.data.mongodb.core.mapping)
createPersistentEntity:41, MongoMappingContext (org.springframework.data.mongodb.core.mapping)
doAddPersistentEntity:403, AbstractMappingContext (org.springframework.data.mapping.context)
addPersistentEntity:379, AbstractMappingContext (org.springframework.data.mapping.context)
addPersistentEntity:339, AbstractMappingContext (org.springframework.data.mapping.context)
accept:-1, AbstractMappingContext$$Lambda$1098/0x00000008013bded0 (org.springframework.data.mapping.context)
forEach:75, Iterable (java.lang)
forEach:-1, ManagedTypes$$Lambda$1093/0x00000008013b90f0 (org.springframework.data.domain)
forEach:79, MongoManagedTypes (org.springframework.data.mongodb)
initialize:484, AbstractMappingContext (org.springframework.data.mapping.context)
afterPropertiesSet:476, AbstractMappingContext (org.springframework.data.mapping.context)
invokeInitMethods:1798, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
initializeBean:1748, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:600, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:522, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:326, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, AbstractBeanFactory$$Lambda$414/0x0000000800e45ff0 (org.springframework.beans.factory.support)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:200, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:254, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1405, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1325, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveAutowiredArgument:885, ConstructorResolver (org.springframework.beans.factory.support)
createArgumentArray:789, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:548, ConstructorResolver (org.springframework.beans.factory.support)
... truncated
Run Code Online (Sandbox Code Playgroud)

我知道这个问题,但我知道我正在使用的代码应该包含此处解释的修复程序。这是否表明我们没有遵循当前推荐的做法来以某种方式初始化我们的 Mongo 实体?在将应用程序升级到 Spring Boot 3.0.x 之前,我们没有看到此警告。

And*_*son 5

由于Spring Framework 6.0 中的这些更改-parameters,现在强烈鼓励使用编译器选项。它允许发现构造函数和方法参数的名称,而无需从.class文件中的调试信息中提取它们。

Spring Framework 6 的升级指南对此主题有以下说明:

LocalVariableTableParameterNameDiscoverer现已弃用,并为每次成功的解析尝试记录一条警告(它仅在StandardReflectionParameterNameDiscoverer未找到名称时启动)。使用通用 Java 8+ 标志来-parameters保留参数名称(而不是依赖-debug编译器标志)来编译 Java 源代码,以避免出现该警告,或者将其报告给受影响代码的维护者。对于 Kotlin 编译器,我们建议使用该-java-parameters标志以确保完整性。