gpt4 book ai didi

java - 使用命令行参数初始化 spring bean

转载 作者:行者123 更新时间:2023-12-02 11:46:34 25 4
gpt4 key购买 nike

将命令行参数映射到 main 类中的对象,然后从另一个类访问它们的最佳方法是什么?我尝试了以下方法,但收到错误消息:无法从静态上下文引用非静态方法。由于我无法将 AppConfig 中的方法设为静态,我还能做什么?

我正在尝试使用命令行参数初始化 spring bean,这是我想到的一种方法。

我刚刚看到我可以在实例化 bean 之前使用单例来保存值,并在 bean 中引用单例,从而完成我现在需要的操作。虽然这听起来很明显,但我一生都无法了解如何使用带注释的类来做到这一点。接下来我可以尝试什么?

Launcher.java

public class Launcher {

public static void main(String [] args) throws Throwable {
AppConfig appConfig = new AppConfig();
appConfig.setParam1(args[0]);
appConfig.setParam2(args[1]);

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppContext.class);
...
}

}

AppConfig.java

public class AppConfig {
private String param1;
private String param2;

public String getParam1() {
return param1;
}

public String setParam1(String param1) {
this.param1 = param1;
}

public String getParam2() {
return param2;
}

public String setParam2(String param2) {
this.param2 = param2;
}
}

AppContext.java

@Configuration
@ComponentScan(basePackageClasses = Launcher.class)
@Slf4j
public class AppContext {
AppConfig appConfig = new AppConfig();

private final String PARAM_1 = appConfig.getParam1();
private final String PARAM_2 = appConfig.getParam2();
}

对我来说,另一种选择是在 AppContext 中再次重新实例化该类,但这是否意味着我无法访问传递的命令行参数:

@Configuration
@ComponentScan(basePackageClasses = Launcher.class)
@Slf4j
public class AppContext {


private final String PARAM_1 = AppConfig.getParam1();
private final String PARAM_2 = AppConfig.getParam2();
}

最佳答案

您使用 private final String PARAM_1 = AppConfig.getParam1(); 的方式要求方法 String getParam1() 必须是静态的。尽管我不认为这是通常的做法。

关于java - 使用命令行参数初始化 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48159088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com