gpt4 book ai didi

java - e4:依赖注入(inject)和处理小部件

转载 作者:行者123 更新时间:2023-12-01 12:07:20 25 4
gpt4 key购买 nike

我有一些从 SWT Composite 派生的类的实例。这些实例通过 ContextInjectionFactory 注入(inject)。该类的一个示例是:

public class MyTest extends Composite {
public MyTest(Composite parent, int style) {
super(parent, style);
}

@Inject
@Optional
private void doSomething(@UIEventTopic(EventConstants.TEST) Object unused) {
//do something
}
}

这就是我使用它的方式:

public createTestContent() {
MyTest myTest = new MyTest(composite, SWT.NONE);
ContextInjectionFactory.inject(myTest, context);
}

public someAction() {
composite.dispose();
}

如果我现在处理掉这些对象(通过处理它们的父对象),我希望示例代码中的方法 doSomething 不再被调用。但实际上它仍然会被调用。

为了阻止这种行为,我需要调用

ContextInjectionFactory.uninject(myTest, context);

有谁知道为什么会这样吗?

最佳答案

当您使用@UIEventTopic时,Eclipse 必须记住该方法,以便在事件发生时可以调用它。 Eclipse 会继续记住并调用此方法,直到您在类实例上运行 ContextInjectionFactory.uninject 为止。

这与处置 SWT 控件无关 - 只是释放控件正在使用的任何 native 数据。

看起来处理 @UIEventTopicExtendedObjectSupplier 使用 WeakReference 来记住方法信息,因此有时可能会在以下情况下处理数据:内存紧张。

关于java - e4:依赖注入(inject)和处理小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com