Jakarta ee 在CDI中处理对象

Jakarta ee 在CDI中处理对象,jakarta-ee,cdi,Jakarta Ee,Cdi,我想知道除了@Disposes方法之外,CDI是否还有其他方法来处理/关闭对象 对于简单的情况,我想做如下操作: class MyObject { @Inject MyObject(MyDependencies...) {...} @Disposes void close() {...} } 不必创建@Disposes方法,只需像这样调用close(): class MyObjectManager { void closeMyObject(@Disposes My

我想知道除了
@Disposes
方法之外,CDI是否还有其他方法来处理/关闭对象

对于简单的情况,我想做如下操作:

class MyObject {

    @Inject MyObject(MyDependencies...) {...}

    @Disposes void close() {...}
}
不必创建
@Disposes
方法,只需像这样调用
close()

class MyObjectManager {

    void closeMyObject(@Disposes MyObject myObject) {
        myObject.close();
    }
}

我想你要找的是。当对象绑定到的任何上下文关闭时,都会调用此方法。用这个方法注释一个方法,并且每当要销毁对象时,该方法都将被调用。

您是使用producer方法创建
MyObject
的实例,还是该类注释正确?否,这是另一个问题:
@Disposes
必须具有相应的
@producers
。在我的例子中,一个
@Inject
'ed构造函数就足够了,但是我不能在其他地方有一个
@Disposes
,我不能在我的bean上有一个
@Closes
(或类似)方法,当它超出范围时,CDI会自动调用它。唯一的缺点(如果可以这样调用的话)正如javadoc所说,该方法不能抛出选中的异常。@datakey对于几乎每个容器回调/生命周期事件都是正确的,而不是特定于此用例。@JohnAment是和否。我认为如果javadoc说clear a不得,容器应该遵循规则。但毫无疑问,(还有AFAIK)CDI容器做了他们想要的事情:OpenWebBeans抱怨
抛出
,而Weld没有。