Java 有没有办法定义cdi销毁实例的顺序?
我正在开发一个应用程序,在其中注入了一些服务。一旦应用程序关闭,我想定义调用destroy()函数的顺序 例如,“服务A需要在服务B之前关闭”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
有没有办法做到这一点呢?假设您有两个对象,
a
和B
,它们彼此之间没有关系,比如说,@Singleton
作用域(只是一个任意作用域)。据我所知,当调用生成Bean
s'destroy()
方法时,没有定义顺序:A
可以先销毁,或者B
可以先销毁
假设您现在有以下三个对象:
@Singleton
作用域中的A
(又是一个任意作用域)B
在@Dependent
范围内,注入A
C
在@Dependent
范围内,注入B
C
将首先被销毁,然后是B
,然后是A
据我所知,这是本规范提供的唯一订购保证。假设您有两个对象,
A
和B
,彼此之间没有关系,例如,@Singleton
范围(只是任意范围)。据我所知,当调用生成Bean
s'destroy()
方法时,没有定义顺序:A
可以先销毁,或者B
可以先销毁
假设您现在有以下三个对象:
@Singleton
作用域中的A
(又是一个任意作用域)B
在@Dependent
范围内,注入A
C
在@Dependent
范围内,注入B
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
内部的生产工具,由制作人
内部代表,以及。我为误会道歉。