有没有办法定义 cdi 销毁实例的顺序?

Is there a way of defining the order by which cdi is going to destroy instances?

我正在开发一个应用程序,其中注入了一些服务。应用程序关闭后,我想定义调用 destroy() 函数的顺序。

例如,“服务 A 需要在服务 B 之前关闭”。

有没有办法做这样的事情?

假设您有两个对象,AB,彼此之间没有任何关系,例如,在 @Singleton 范围内(只是一个任意范围)。据我所知,当他们的生产 Beans' destroy() 方法被调用时没有明确的顺序:A 可以首先被销毁,或者 B 可以首先被销毁。

假设现在您拥有这三个对象:

  1. A@Singleton 范围内(同样,任意范围)
  2. B@Dependent 范围内,注入到 A
  3. C@Dependent 范围内,注入到 B

在这种情况下,再次假设我们谈论的是自定义 bean 而不是托管 bean,C 将首先被销毁,然后是 B,然后是 A.

据我所知,这是规范提供的唯一订购保证。