代码之家  ›  专栏  ›  技术社区  ›  lisak

应用程序初始化的首选方法

  •  0
  • lisak  · 技术社区  · 14 年前

    你们有自己的项目初创企业小框架吗?我的意思是,每次一开始就需要做同样的事情:


    上下文初始化-最好在处理参数之后。有时没有交互式用户输入,有时有输入阅读器。有时我们需要加载属性,有时不需要。然后我们需要让一个类脱离上下文并运行它的方法。编程……编程直到编写shell脚本将所有内容放到类路径上。


    的确,它根据实际需要而不同。但在我看来,我一直在做几乎相同的事情,一次又一次地从头开始。有时我意识到我只是因为不想做这些烦人的初创公司而推迟工作。


    如果有某种通用的主类对指定的bean进行反射、上下文初始化、参数解析、交互式用户输入读取,并让程序员做重要的事情,那就太好了……所有的设置都可以通过Spring配置完成。我想我得自己去做。

    我很感激你的想法

    编辑:我要做的是:某种类型的启动类,它将获得用户和开发人员参数(Spring上下文文件的路径、使用用户参数设置bean和实例化bean的路径、使用Spring上下文提供并运行)。用于参数解析的轻量级API,可能是用于交互式用户输入的,这可能很困难。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Justin    14 年前

    我使用一个抽象基类,从中启动所有命令行实用程序。初始化过程定义了一些基本的启动生命周期方法。我不使用命令行参数

    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();
     }
    }
    

    出于某种原因,我的基于Swing的非交互式应用程序都没有使用命令行参数( args[] ,因为这些通常是带有安装程序和属性文件的服务。