Java Tapestry:使用@startup和@order注释的启动顺序

Java Tapestry:使用@startup和@order注释的启动顺序,java,tapestry,Java,Tapestry,考虑Tapestry项目中的一些AppModule 我想对操作序列进行排序,这些操作必须在系统启动时调用 考虑一下,我有两个简单的动作: 1) 必须首先采取的行动: @Startup public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) { logger.info("Updating database by liquibase service..."); liq

考虑
Tapestry
项目中的一些
AppModule

我想对操作序列进行排序,这些操作必须在系统启动时调用

考虑一下,我有两个简单的动作:

1) 必须首先采取的行动:

@Startup
public static void initMyApplication(Logger logger, LiquibaseService liquibaseService) {
    logger.info("Updating database by liquibase service...");
    liquibaseService.update();
    logger.info("update-db done.");
}
2) 第二个:

@Startup
@Order("after:LiquibaseService")
public static void doSomeChecks(HibernateSessionManager hsm) {
   ... 
}
我无法理解(即使在阅读文档之后):如何使用
@order
注释指定此类操作的顺序?

更具体地说:我需要在
@Order(“after:)
中指出什么

看起来,这种结构像:

@Order(“之后:LiquibaseService”)

@Order(“在:initMyApplication之后”)


不起作用。实际上,我的
启动
操作是以任意顺序调用的。

我认为
@order
不能与
@startup
一起使用,但您可以做的是使用
贡献者注册启动
。因为它需要
有序配置
您可以对贡献进行排序

public class MyModule1
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MyFirstContribution", new Runnable() { ... });
  }
}

public class MyModule2
{
  public static void contributeRegistryStartup(OrderedConfiguration<Runnable> configuration)
  {
    configuration.add("MySecondContribution", new Runnable() { ... }, "after:MyFirstContribution");
  }
}
公共类MyModule1
{
公共静态无效参与者注册启动(OrderedConfiguration)
{
add(“MyFirstContribution”,new Runnable(){…});
}
}
公共类MyModule2
{
公共静态无效参与者注册启动(OrderedConfiguration)
{
add(“MySecondContribution”,new Runnable(){…},“在:MyFirstContribution之后”);
}
}

是的,我知道
contributeRegistryStartup
方法。但我不明白,我如何才能像我的方法
initMyApplication
一样,将所需服务的匿名
可运行的
对象实例注入其中(我指的是服务的实例
LiquibaseService
,而这只是一个示例)。如果你能给我提供这样的例子,它将是+1并选中:)是的,它确实有效,我选中了。谢谢,这是一个有趣的决定。