Java 关于如何在Eclipse4中使用IContextFunction的示例
我读过关于org.eclipse.e4.core.contexts.IContextFunction的文章,但在网上找不到实际的例子。Java 关于如何在Eclipse4中使用IContextFunction的示例,java,eclipse,eclipse-plugin,osgi,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Osgi,Eclipse Rcp,我读过关于org.eclipse.e4.core.contexts.IContextFunction的文章,但在网上找不到实际的例子。 我的理解是,一个组件实现了一个IContextFunction,在调用compute时,另一个对象被延迟创建。 但是我不清楚如何/何时调用compute方法。 例如: <?xml version="1.0" encoding="UTF-8"?> <scr:component xmlns:scr="http://www.osgi.org/xm
我的理解是,一个组件实现了一个
IContextFunction
,在调用compute
时,另一个对象被延迟创建。但是我不清楚如何/何时调用
compute
方法。例如:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"
name="com.example.e4.rcp.todo.contextservice.translate">
<implementation class="com.example.e4.rcp.todo.contextservice.Test"/>
<service>
<provide interface="org.eclipse.e4.core.contexts.IContextFunction"/>
</service>
<property name="service.context.key" type="String"
value="com.example.e4.rcp.todo.contextservice.test"/>
</scr:component>
必须有人调用com.example.e4.rcp.todo.contextservice.test
才能调用compute
,但我不清楚如何使用它。有人有参考范例吗 这是注射到POJO中的东西。 例如 或 或
是的,我在谷歌搜索了很多次后找到了你发布的第二个示例。但是找不到关于第一个示例的任何信息。对于第一个示例,名为的变量的
Inject
什么时候会发生?只要你的pojo被实例化并且在DI引擎的控制下,它就会发生。不过,如果您知道第二个示例是如何使用的,那么第一个示例几乎是相同的。不同之处在于,您可以在test()方法中做更多的事情,而不仅仅是设置/注入@Named字段。例如,您可以在命令处理程序中使用“com.example.e4.rcp.todo.contextservice.test”对象……当您说POJO
时,您是指yourObject
还是将yourObject
作为成员的类?因为如果我执行ctx.get(“com.example.e4.rcp.todo.contextservice.test”)
成员yourObject
不会自动注入,对吗?这就是为什么在第二个示例中显式填充的原因。第一个示例适用于在ctx.get(“com.example.e4.rcp.todo.contextservice.test”)之后实例化具有yourObject
作为成员的对象的情况代码>在代码中的某个地方被调用?在第一个示例中仍然不清楚。POJO=需要yourObject的类。您可能想看看这个:(参见底部的“注射顺序”)。现场注入将在方法注入之前进行。也就是说,如果您调试并向test()添加断点,那么该字段应该已经被注入。因此,您是说调用ctx.get
是案例1必须的,对吗?
public class YourPojo {
@Inject
@Named("com.example.e4.rcp.todo.contextservice.test")
private Object yourObject;
}
public class YourPojo {
@Inject
public void test(IEclipseContext ctx) {
Object yourObject = ctx.get("com.example.e4.rcp.todo.contextservice.test");
}
}
public class YourPojo {
@Inject
public void test(@Named("com.example.e4.rcp.todo.contextservice.test") Object yourObject) {
// consume yourObject
}
}