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

时间:2018-01-08 22:44:02

标签: java spring

将命令行参数映射到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();                 
}

1 个答案:

答案 0 :(得分:1)

您使用private final String PARAM_1 = AppConfig.getParam1();的方式要求方法String getParam1()必须是静态的。虽然我没有像往常那样看待它。