Предпочтительный способ инициализации приложения - PullRequest
0 голосов
/ 16 июня 2010

У вас, ребята, есть свой собственный каркас для стартапов проектов?Я имею в виду, что каждый раз в начале нужно делать одно и то же:


Инициализация контекста - в идеале после обработки аргументов.Иногда без интерактивного пользовательского ввода, иногда с читателем ввода.Иногда нам нужно загрузить свойства, иногда нет.Затем нам нужно вывести класс из контекста и запустить его метод.Программирование .... программирование до написания сценария оболочки для размещения всего на classpath.


Это правда, что он отличается в зависимости от фактических потребностей.Но мне кажется, что я делаю всегда почти одно и то же, снова и снова с нуля.Иногда я понимаю, что откладываю свою работу только потому, что не хочу делать эти надоедливые стартапы.


Было бы замечательно, если бы какой-нибудь универсальный класс Main делал отражение для указанного бина, инициализация контекста, разбор аргументов, интерактивное чтение пользовательского ввода и выполнение программистом важных задач ... Все настройки могут быть выполнены через конфигурацию Spring.Я думаю, что я должен сделать это сам.

Буду признателен за ваши идеи

РЕДАКТИРОВАТЬ: Что я сделаю: Какой-то класс запуска, который будет получать аргументы пользователя и разработчика (путь к контекстному файлу Spring, bean-компонент для установки с пользователемаргументы и бин для создания экземпляра, снабдить контекстом пружины и запустить).Облегченный API для анализа аргументов, может быть, что-то для интерактивного пользовательского ввода, что может быть трудно

1 Ответ

2 голосов
/ 17 июня 2010

Я использую абстрактный базовый класс, из которого запускаются все мои утилиты командной строки.В процессе инициализации определены некоторые базовые методы запуска жизненного цикла.Я не использую аргументы командной строки

public abstract class MyAppBase {
 public abstract String[] getSpringConfigResource();
 public void loadConsoleApplication() {
  try {
   preLoad();
   initializeSpring();
   loadConfiguration();
   loadDynamicComponents();
   postApplicationLoad();
  }
  catch (Exception ex) {
   handleStartupException("error initialzing application", ex);
  }
 }
 ...
}

Конкретные подклассы выглядят примерно так:

public class MyApp extends MyAppBase {
 public String[] getSpringConfigResource() {
  return new String[] { "someapp/appctx.xml", "util/appctx2.xml" }; 
 }

 protected void postApplicationLoad() {
  SomeServer server = springCtx.getBean("server");
  server.start();
 }

 public static void main(String args[]) {
  initLogging("com/me/myAppLog4j.xml", MyApp.class);    
  MyApp myApp = new MyApp ();
  myApp.loadConsoleApplication();
 }
}

По какой-то причине ни одно из моих неинтерактивных приложений на основе свинга не использует аргументы командной строки (args[]), поскольку это, как правило, службы с установщиками и файлами свойств.

...