如何在调用构造函数之前注入 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 中:
在字节码级别。
- 对象已创建但未初始化。
- 调用构造函数,将对象作为 this
- 当构造函数returns.
时对象完全constructed/created
在 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 中:
在字节码级别。
- 对象已创建但未初始化。
- 调用构造函数,将对象作为 this
- 当构造函数returns. 时对象完全constructed/created