如何在调用构造函数之前注入 spring @Value 注释值?

How to get spring @Value annotated values injected even before calling the constructor?

在 spring 连接中,有一种方法可以将 application.properties 中定义的属性连接到在构造函数调用之前用 @Value 注释的相应字段。

请在下面的代码中查看我的评论。我希望字段 prop1(及其值)可用于 constructor。可能吗。 同样,我希望 prop1 字段(及其值)可用于 getInstanceProp() 方法。可能吗??

package com.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class WirableComponent {
  
  @Value("${prop1}")
  String prop1;
  
  String instanceProp = getInstanceProp(); //null - I want prop1 value to be injected before making this method call so i can use it in the method.
  
  public WirableComponent() {
    System.err.println("no-args WirableComponent Constructor invoked");
    System.err.println("value prop1: " + prop1); //null - I want prop1 value to be injected before constructor call so i can use it in constructor.
    System.err.println("value instanceProp: " + instanceProp);  //null

  }

  public String getInstanceProp() {
    System.err.println("value prop1: " + prop1);
    return null;
  }
  

}

@value 的工作方式类似于 spring 的依赖注入规则,当应用程序上下文加载并创建 WirableComponent class 的 bean 时,prop1 值可以通过构造函数注入实例化(这可以用于方法调用)

@Component
public class WirableComponent {

  private final String prop1;

  public WirableComponent(@Value("${prop1}") String prop1){
    this.prop1 = prop1;
  }
}

其次,虽然 prop1 是一个字符串文字,但它从 spring 上下文中获取值,因此它在 class 中不可用,直到构造函数调用发生在 Java 中:

在字节码级别。

  1. 对象已创建但未初始化。
  2. 调用构造函数,将对象作为 this
  3. 当构造函数returns.
  4. 时对象完全constructed/created