首页 > 解决方案 > 有没有办法定义 cdi 销毁实例的顺序?

问题描述

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

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

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

标签: javacdijava-ee-7

解决方案


假设您有两个对象,A并且B彼此没有关系,例如在 @Singleton范围(只是一个任意范围)中。Bean据我所知,在调用它们的产生方法时没有明确的顺序destroy()A可以先销毁,B也可以先销毁。

假设现在你有这三个对象:

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

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

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


推荐阅读