Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序初始化的首选方式_Java_Spring_Initialization_Startup - Fatal编程技术网

Java 应用程序初始化的首选方式

Java 应用程序初始化的首选方式,java,spring,initialization,startup,Java,Spring,Initialization,Startup,你们有自己的项目启动小框架吗?我的意思是,每次一开始就需要做同样的事情: 上下文初始化-理想情况下是在处理参数之后。有时没有交互式用户输入,有时使用输入阅读器。有时我们需要加载属性,有时不需要。然后我们需要从上下文中获取一个类并运行它的方法。编程…编程直到编写shell脚本将所有内容放在类路径上 诚然,它根据实际需要而有所不同。但在我看来,我一直在做几乎相同的事情,一次又一次地从头开始。有时我意识到我之所以推迟工作,只是因为我不想做这些令人讨厌的初创公司 如果有某种通用的主类对指定的bea

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


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


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


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

我很感激你的想法


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

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

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

对于我的意思,这是一个非常好的设计。。此模板方法模式。谢谢分享