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并选中:)是的,它确实有效,我选中了。谢谢,这是一个有趣的决定。