e4:依赖注入和处理小部件

时间:2014-12-15 13:33:41

标签: java dependency-injection swt rcp e4

我有一些类的实例来自SWT Composite。 这些实例注入了ContextInjectionFactory。该课程的一个例子是:

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);

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

这与处理SWT控件无关 - 只是释放控件使用的任何本机数据。

看起来处理ExtendedObjectSupplier的{​​{1}}使用@UIEventTopic来记住方法信息,因此有时可能会在内存紧张时处理数据。