Две возможности, которые я могу придумать.
1) Установите статическую привязку. (Статическая переменная, хотя обычно вызывает недовольство, в этом случае работает нормально, потому что может быть только 1 вызов командной строки)
public class MyApp {
public static String[] ARGS;
public static void main(String[] args) {
ARGS = args;
// create context
}
}
Затем вы можете ссылаться на аргументы командной строки в Spring с помощью:
<util:constant static-field="MyApp.ARGS"/>
В качестве альтернативы (если вы полностью против статических переменных), вы можете:
2) Программно добавить аргументы в контекст приложения:
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"
};
}
Разбор аргументов командной строки оставлен читателю в качестве упражнения.