Quarkus中如何将@ConfigProperty传入构造函数?
解决配置属性注入时机导致的TestClass初始化问题
你遇到的核心问题是字段注入的时机晚于构造函数执行:容器会先调用AppScopeTest的构造函数创建实例,之后才会给@ConfigProperty标注的test字段赋值,所以构造函数里用test初始化TestClass时,它还是null。
解决方案:构造函数注入配置属性
直接把@ConfigProperty标注在构造函数的参数上,让容器先解析配置值再传入构造函数,这样就能在实例创建时用有效配置初始化TestClass:
@ApplicationScoped public class AppScopeTest { private final TestClass testClass; @Inject public AppScopeTest(@ConfigProperty(name = "my-config-prop") String test) { this.testClass = new TestClass(test); } }
说明:
- 将配置属性从字段改成构造函数参数,容器会自动完成配置值的注入,确保构造函数执行时
test已经是有效的配置字符串 testClass设为final字段,保证它在AppScopeTest实例创建时就完成初始化,完全符合你“创建时完成实例化”的要求
可选优化(若TestClass需容器管理)
如果TestClass本身需要被容器管理,也可以让容器负责它的初始化:
// TestClass 配置成容器管理的Bean @Singleton public class TestClass { public TestClass(@ConfigProperty(name = "my-config-prop") String test) { // 这里使用test完成初始化逻辑 } } // AppScopeTest 直接注入TestClass实例 @ApplicationScoped public class AppScopeTest { private final TestClass testClass; @Inject public AppScopeTest(TestClass testClass) { this.testClass = testClass; } }
这种方式更贴合依赖注入的设计思想,但如果TestClass不需要容器管理,第一种直接构造的方式就足够满足需求。
内容的提问来源于stack exchange,提问作者santi254
相关产品推荐
相关产品推荐

