考虑AppModule
项目中的一些Tapestry
。
我想订购一系列动作,必须在系统启动时调用。
考虑一下,我有两个简单的动作:
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:<HERE>)
?
看来,这些结构如下:
@Order("after:LiquibaseService")
或
@Order("after:initMyApplication")
不行。实际上我的startup
动作是以任意顺序调用的。
答案 0 :(得分:1)
我认为@Order
不能与@Startup
一起使用,但您可以使用contributeRegistryStartup
。因为它需要OrderedConfiguration
,您可以订购您的贡献。
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");
}
}