low*_*llk 37 java spring command-line
当我编写一个解析命令行参数的Spring命令行应用程序时,如何将它们传递给Spring?我想让我的main()结构化,以便它首先解析命令行args然后进入Spring吗?即便如此,它如何通过将解析的args保存到Spring的对象?
fli*_*ken 39
我能想到的两种可能性.
1)设置静态参考.(静态变量,虽然通常不赞成,但在这种情况下是可以的,因为只能有1个命令行调用).
public class MyApp {
public static String[] ARGS;
public static void main(String[] args) {
ARGS = args;
// create context
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式引用Spring中的命令行参数:
<util:constant static-field="MyApp.ARGS"/>
Run Code Online (Sandbox Code Playgroud)
或者(如果您完全反对静态变量),您可以:
2)以编程方式将args添加到应用程序上下文中:
public class MyApp2 {
public static void main(String[] args) {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// Define a bean and register it
BeanDefinition beanDefinition = BeanDefinitionBuilder.
rootBeanDefinition(Arrays.class, "asList")
.addConstructorArgValue(args).getBeanDefinition();
beanFactory.registerBeanDefinition("args", beanDefinition);
GenericApplicationContext cmdArgCxt = new GenericApplicationContext(beanFactory);
// Must call refresh to initialize context
cmdArgCxt.refresh();
// Create application context, passing command line context as parent
ApplicationContext mainContext = new ClassPathXmlApplicationContext(CONFIG_LOCATIONS, cmdArgCxt);
// See if it's in the context
System.out.println("Args: " + mainContext.getBean("args"));
}
private static String[] CONFIG_LOCATIONS = new String[] {
"applicationContext.xml"
};
}
Run Code Online (Sandbox Code Playgroud)
解析命令行参数留给读者练习.
从 Spring 3.1 开始,不需要其他答案中建议的任何自定义代码。检查CommandLinePropertySource,它提供了一种将 CL 参数注入上下文的自然方式。
如果您是一名幸运的 Spring Boot 开发人员,您可以利用SpringApplication为您提供以下功能的事实进一步简化您的代码:
默认情况下,类将执行以下步骤来引导您的应用程序:
...
注册 CommandLinePropertySource 以将命令行参数公开为 Spring 属性
如果您对 Spring Boot 属性解析顺序感兴趣,请参阅此页面。
看看我的Spring-CLI库 - 在http://github.com/sazzer/spring-cli - 作为这样做的一种方式.它为您提供了一个自动加载spring上下文的主类,并且能够使用Commons-CLI自动解析命令行参数并将它们注入到bean中.
您还可以将Object数组作为第二个参数传递getBean给构造函数或工厂的参数.
public static void main(String[] args) {
Mybean m = (Mybean)context.getBean("mybean", new Object[] {args});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33333 次 |
| 最近记录: |