Pipeline p = Pipeline.create();
p.readFrom(TestSources.items("the", "quick", "brown", "fox"))
.map(mapFn)
.writeTo(Sinks.logger());
我希望mapfn
是需要非序列化依赖项才能完成其工作的东西。
我知道我能做到:
Pipeline p = Pipeline.create();
p.readFrom(TestSources.items("the", "quick", "brown", "fox"))
.mapUsingService(JetSpringServiceFactories.bean("myDependencies"),
MyDependencies::addDependencies);
.map(mapFn)
.writeTo(Sinks.logger());
这将从源代码读取的字符串包装在包含依赖项的另一个对象中,从而使Mapfn
能够访问这些依赖项,而不需要将它们注入到该对象本身。这是可行的,但我想在Jet之外使用我的映射函数,也是管道的一部分,在这种情况下,必须将依赖关系与被映射的项一起传递,而不是仅仅用它需要的依赖关系初始化映射器,这有点奇怪。它还迫使我毫无意义地在我的流/批处理中为每个项创建一个包装器对象。
文档说,另一种选择是在处理器
上使用@springaware
注释,但我认为这意味着使用核心API,文档说,核心API“主要为您提供了许多出错的方法”,所以我宁愿避免这种情况。
在vanilla Hazelcast IMDG中,任何被反序列化的东西都可以使用ManagedContext
来初始化自己,显然Jet也是这样,但是管道的函数、过滤器等被包装在许多层的Jet管道中,所以似乎没有办法找到它们。
我是缺少了什么,还是列出了所有的选项(除了求助于一些“全局”静态
依赖项对象之外)?
你描述的方式实际上很接近它应该如何做。您可以通过以下操作来简化它:
Pipeline p = Pipeline.create();
p.readFrom(TestSources.items("the", "quick", "brown", "fox"))
.mapUsingService(bean("myDependencies"), (dep, item) -> mapFn.apply(dep, item));
.writeTo(Sinks.logger());
这样可以避免创建中间项。正如您已经说过的,这要求映射函数也将依赖项作为参数。
如果您想避免这种情况,另一个选择是编写一个自定义的ServiceFactory
,它将执行映射并获取依赖项。通过这种方式,您可以将映射函数重写为服务,并在构造函数级别注入依赖项。
问题内容: 我在Android应用程序中将Dagger2用于DI。我发现我必须为使用@Inject字段的每个类编写注入方法。有没有一种方法可以只注入父类,而不必在每个子类上调用inject?以活动为例。我有一个“ 每个活动都从中延伸”的内容。有没有一种方法,我可以在BaseActivity的组件中创建一个注入方法,然后在BaseActivity的onCreate中调用inject,子活动中的@in
在Spring DI中,将autowired字段声明为可选字段可以使客户端不向其注入任何值。使用Java EE的CDI是否可能做到这一点?我试过可选但失败了。我想知道是否有一个等价的机制我可以使用。 下面是我尝试的: 我得到一个错误消息:线程“main”org.jboss.weld.exceptions.deploymentexception:WELD-001408在注入点[[BackedAnno
问题内容: 我想将依赖项注入。但是,我的方法不起作用。我可以看到Spring正在调用我的setter方法,但是稍后在调用when时,该属性为。 这是我的设置: ServletContextListener: web.xml :(这是文件中的最后一个侦听器) applicationContext.xml: 输出: 实现此目的的正确方法是什么? 问题答案: 我通过删除侦听器bean并为我的属性创建了一
ContactController.java
问题内容: 我试图将Spring依赖项注入到JPA EntityListener中。这是我的侦听器类: 这是我的Entity类: 但是,我的依赖项(即)始终为null。 问题答案: 注入对无状态bean的依赖关系的一种方法是将依赖关系定义为“静态”,创建一个setter方法,以便Spring可以注入依赖关系(将其分配给静态依赖关系)。 将依赖项声明为静态。 创建一个方法,以便Spring可以注入它
有人能帮忙吗?