当前位置:  开发笔记 > 编程语言 > 正文

处理命令行参数和Spring

如何解决《处理命令行参数和Spring》经验,为你挑选了3个好方法。

当我编写一个解析命令行参数的Spring命令行应用程序时,如何将它们传递给Spring?我想让我的main()结构化,以便它首先解析命令行args然后进入Spring吗?即便如此,它如何通过将解析的args保存到Spring的对象?



1> flicken..:

我能想到的两种可能性.

1)设置静态参考.(静态变量,虽然通常不赞成,但在这种情况下是可以的,因为只能有1个命令行调用).

public class MyApp {
  public static String[] ARGS; 
  public static void main(String[] args) {
    ARGS = args;
      // create context
  }
}

然后,您可以通过以下方式引用Spring中的命令行参数:


或者(如果您完全反对静态变量),您可以:

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"
   };

 }

解析命令行参数留给读者练习.


+1表示静态引用.6行代码优于20行.

2> Graham..:

看看我的Spring-CLI库 - 在http://github.com/sazzer/spring-cli - 作为这样做的一种方式.它为您提供了一个自动加载spring上下文的主类,并且能够使用Commons-CLI自动解析命令行参数并将它们注入到bean中.



3> BeWarned..:

您还可以将Object数组作为第二个参数传递getBean给构造函数或工厂的参数.

public static void main(String[] args) {
   Mybean m = (Mybean)context.getBean("mybean", new Object[] {args});
}

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有