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

Java 有没有办法定义cdi销毁实例的顺序?,java,cdi,java-ee-7,Java,Cdi,Java Ee 7,我正在开发一个应用程序,在其中注入了一些服务。一旦应用程序关闭,我想定义调用destroy()函数的顺序 例如,“服务A需要在服务B之前关闭” 有没有办法做到这一点呢?假设您有两个对象,a和B,它们彼此之间没有关系,比如说,@Singleton作用域(只是一个任意作用域)。据我所知,当调用生成Beans'destroy()方法时,没有定义顺序:A可以先销毁,或者B可以先销毁 假设您现在有以下三个对象: @Singleton作用域中的A(又是一个任意作用域) B在@Dependent范围内,注入A

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

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


有没有办法做到这一点呢?

假设您有两个对象,
a
B
,它们彼此之间没有关系,比如说,
@Singleton
作用域(只是一个任意作用域)。据我所知,当调用生成
Bean
s'
destroy()
方法时,没有定义顺序:
A
可以先销毁,或者
B
可以先销毁

假设您现在有以下三个对象:

  • @Singleton
    作用域中的
    A
    (又是一个任意作用域)
  • B
    @Dependent
    范围内,注入
    A
  • C
    @Dependent
    范围内,注入
    B
  • 在本例中,再次假设我们讨论的是定制bean而不是托管bean,
    C
    将首先被销毁,然后是
    B
    ,然后是
    A


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

    假设您有两个对象,
    A
    B
    ,彼此之间没有关系,例如,
    @Singleton
    范围(只是任意范围)。据我所知,当调用生成
    Bean
    s'
    destroy()
    方法时,没有定义顺序:
    A
    可以先销毁,或者
    B
    可以先销毁

    假设您现在有以下三个对象:

  • @Singleton
    作用域中的
    A
    (又是一个任意作用域)
  • B
    @Dependent
    范围内,注入
    A
  • C
    @Dependent
    范围内,注入
    B
  • 在本例中,再次假设我们讨论的是定制bean而不是托管bean,
    C
    将首先被销毁,然后是
    B
    ,然后是
    A


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

    将服务引用放入树状图中,键为销毁顺序。然后在树中循环销毁每个服务,并在调用之间插入一个简短的
    wait()
    。或者ArrayList。只是因为我好奇:你的
    destroy()
    函数实际上做什么?为什么这些函数依赖于之前关闭的另一个服务?我一直认为CDI的一个主要目的是,您不必担心这些事情。@maio290在本例中,我有一个管理对象列表的服务。我还有其他人请求并执行此对象列表中的操作。关闭时,最好能建立订单。老实说,这是一个“很好的选择”,所以我正在调查情况。将服务引用放在树状图中,关键是销毁顺序。然后在树中循环销毁每个服务,并在调用之间插入一个简短的
    wait()
    。或者ArrayList。只是因为我好奇:你的
    destroy()
    函数实际上做什么?为什么这些函数依赖于之前关闭的另一个服务?我一直认为CDI的一个主要目的是,您不必担心这些事情。@maio290在本例中,我有一个管理对象列表的服务。我还有其他人请求并执行此对象列表中的操作。关闭时,最好能建立订单。老实说,这是一个“很好的选择”,所以我正在调查情况。这个答案的总体思路是正确的,但是
    托管bean
    自定义bean
    的概念被误用了。请参见等级库定义。我不确定你所说的
    custombean
    是什么意思,因为它通常意味着
    bean
    接口的自定义实现(然后通过可移植扩展注册)。我认为托管bean类是由
    bean
    表示的,而
    bean
    内部的生产工具,由
    制作人
    内部代表,以及。对于误解,我深表歉意。这个答案的总体思路是正确的,但是
    托管bean
    自定义bean
    的概念被误用了。请参见等级库定义。我不确定你所说的
    custombean
    是什么意思,因为它通常意味着
    bean
    接口的自定义实现(然后通过可移植扩展注册)。我认为托管bean类是由
    bean
    表示的,而
    bean
    内部的生产工具,由
    制作人
    内部代表,以及。我为误会道歉。