当前位置: 首页 > 面试题库 >

在CDI中插入对象列表(焊接)

何飞翰
2023-03-14
问题内容

比方说,我有一个名为接口SocialNetworkService,以及三种实现-
TwitterServiceFacebookServiceFriendFeedService

现在,我希望每当我的托管bean(或任何Web组件)收到一条消息时,便在所有社交网络中共享它。我试过了:

@Inject private List<SocialNetworkService> socialNetworkServices;

但这没有用(部署错误)。(也尝试了@Any预选赛-同样的结果)

那么,有没有办法注入接口的所有(或某些)实现的列表?

我知道给定注入点不应包含多个可能的bean的规则。我想我可以通过创建一个产生列表的生产者并使用来实现这一点Instance<SocialNetworkService>,但这对于这项任务来说似乎太多了。


问题答案:

将我的尝试与Weld论坛的答案结合在一起:

@Inject @Any
private Instance<SocialNetworkService> services;

Instance实现Iterable,因此可以简单地使用for-each循环。在@Any需要预选赛。

另一种方法是使用事件系统:

  • 创建一个MessageEvent(包含有关消息的所有信息)
  • 无需注入社交网络列表,只需注入事件:
    @Inject private Event<MessageEvent> msgEvent;
    

并解雇: msgEvent.fire(new MessageEvent(message));

  • 观察所有服务中的事件(无论其接口如何,可能都可以):
    public void consumeMessageEvent(@Observes MessageEvent msgEvent) {..}
    


 类似资料:
  • 有一个简单的Mongo DB生产者连接到Mongo数据库 我的src/main/resources/meta-inf中的一个资源文件 WeldContext和WeldJUnit4Runner来自这里-http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/

  • 像这样上课: 有没有可能告诉Weld不要注射到c中?我可以否决使用事件的类: 但是B物体也不会被注射。我在搜索类似这样的东西:“如果类名是A,字段类型是C,那么省略注入。” 更具体地说,我希望HK2引擎注入“C”字段,问题是HK2和焊接都使用@注入注释。 我尝试了西利亚罗斯的解决方案。我找到了想要添加自定义注入实现的类型,比如: 在我添加了覆盖注入(…)在美国 比如: 在Manager eBVia

  • 我正在学习jboss Weld Event教程中的Weld Event,我想写一个观察事件并在事件被激发时打印helloword的示例。 这是我的代码: 它不起作用,给出以下异常信息: 容器中似乎没有可以初始化的bean 那么我该怎么做才能使它运行,我的beans.xml是空的 也许我应该在beans.xml中做些什么? 或者我应该编写一个实现事件接口的Java类? 任何内容都将适用。

  • 我试图提供一个机会注入任意枚举给定的注入点和字符串值(这是在生产方法中获得) 任意是指如果我有枚举我的和枚举你的,我想用相同的生产者方法注入它们两个或任何其他一个。 所以我尝试了几种方法:1。 2.我将返回类型更改为对象。 在这两种情况下,我都会收到由:org引起的下一个异常。jboss。焊接例外情况。DeploymentException:WELD-001408:在注入点[BackedAnnot

  • 问题内容: 伙计们,我只是花了很多时间来尝试查找-我应该缺少一些基本知识。 我有一个python对象,我要做的就是将此对象插入mondodb中。 这就是我所拥有的: 抛出此错误: 好像是因为json.dumps()返回一个字符串。 现在,如果我在插入之前对值进行加载,则效果很好: 最直接的方法是什么? 谢谢! 问题答案: 是什么在你最初的代码? 它不应该是类实例 这应该工作:

  • 我是morphia的新手,想知道是否可以在文档中嵌入自定义对象列表,同时拥有自定义名称。 例如,