应用初始化的首选方式

时间:2010-06-16 18:37:46

标签: java spring initialization startup

你们有没有自己的项目初创公司的小框架?我的意思是,每次开始时都需要做同样的事情:


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


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


如果有某种通用的Main类对指定的bean进行反射,上下文初始化,参数解析,交互式用户输入读取并让程序员做重要的事情,那将是很好的...所有设置都可以通过spring完成组态。我想我必须自己做。

我很感激你的想法

编辑:我将做什么:某种启动类将获得用户和开发人员参数(弹簧上下文文件的路径,使用用户参数设置的bean和实例化的bean,提供spring上下文和运行)。用于参数解析的轻量级api,可能是用于交互式用户输入的东西,可能很难

1 个答案:

答案 0 :(得分:2)

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

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[]),因为这些参数往往是带有安装程序和属性文件的服务。