我有两个类Foo
和Bar
,它们实现了Managed
我正在使用' dropwizard-guice'使用enableAutoConfig
(Dropwizard 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}}。有没有办法达到所需的排序?
答案 0 :(得分:2)
所以查看代码,托管对象只是添加到列表中。这意味着您添加它们的顺序将是它们执行的顺序。现在可能会有一些细微之处会让你感到困惑,所以我不会依赖它。
DW中的生命周期由Jetty处理。因此启动/停止bean的功能就在那里。
我会实现一个自定义解决方案,因为你使用的是guice,这将非常简单直接。
这将使您有2种不同类型的托管。 MyManaged还可以实现可排序或创建订单所需的任何内容,这样您就能够精确控制执行顺序。
这个将负责您的MyManaged课程。它必须实现Managed并由DW处理。因此,基本上您将自己的托管对象包装到托管对象中,以便您可以控制要执行的操作。
在MyManagedContainer中,在开始/停止时,您只需将自己的开始/停止对象分开。
Guice为您提供MultiBindings:https://github.com/google/guice/wiki/Multibindings
因此,您创建了Foo和Bar,它们都实现了MyManaged和某种排序。
绑定它们并将它们作为Set注入MyManagedContainer。您添加到dropwizard的托管生命周期的MyManagedContainer。
Tada,您现在已经完全控制了执行顺序。
我为缺乏代码而道歉,但事实上我没有实现这一点。我也使用guicey(内部支持多绑定和更多)而不是guice。
如果您需要更多帮助,请与我们联系。
谢谢, 阿图尔