dropwizard-guice:托管对象的顺序

时间:2016-03-17 21:33:59

标签: java guice dropwizard

我有两个类FooBar,它们实现了Managed 我正在使用' dropwizard-guice'使用enableAutoConfigDropwizard Guice)自动添加捆绑包和托管对象。但AutoConfig以随机顺序添加托管对象。

但在我的情况下,我正在向Foo注入单个Bar实例,我总是希望Foo首先创建并添加Foo并在Bar之后销毁public class MainActivity extends AppCompatActivity { // 0 yellow ; 1 red; int activePlayer = 0; boolean gameIsActive = true; // 2 unplayed; int[] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2}; int[][] winningPositions = { {0,1,2}, {3,4,5}, {6,7,8}, //hor {0,3,6}, {1,4,7}, {2,5,8}, // ver {0,4,8}, {2,4,6} }; // dia {1}}。有没有办法达到所需的排序?

1 个答案:

答案 0 :(得分:2)

所以查看代码,托管对象只是添加到列表中。这意味着您添加它们的顺序将是它们执行的顺序。现在可能会有一些细微之处会让你感到困惑,所以我不会依赖它。

DW中的生命周期由Jetty处理。因此启动/停止bean的功能就在那里。

我会实现一个自定义解决方案,因为你使用的是guice,这将非常简单直接。

  1. 添加新的托管界面" MyManaged"
  2. 这将使您有2种不同类型的托管。 MyManaged还可以实现可排序或创建订单所需的任何内容,这样您就能够精确控制执行顺序。

    1. 添加一个新容器" MyManagedContainer"
    2. 这个将负责您的MyManaged课程。它必须实现Managed并由DW处理。因此,基本上您将自己的托管对象包装到托管对象中,以便您可以控制要执行的操作。

      在MyManagedContainer中,在开始/停止时,您只需将自己的开始/停止对象分开。

      1. 在Guice中创建所有内容。
      2. Guice为您提供MultiBindings:https://github.com/google/guice/wiki/Multibindings

        因此,您创建了Foo和Bar,它们都实现了MyManaged和某种排序。

        绑定它们并将它们作为Set注入MyManagedContainer。您添加到dropwizard的托管生命周期的MyManagedContainer。

        Tada,您现在已经完全控制了执行顺序。

        我为缺乏代码而道歉,但事实上我没有实现这一点。我也使用guicey(内部支持多绑定和更多)而不是guice。

        如果您需要更多帮助,请与我们联系。

        谢谢, 阿图尔