如何为一个类实例化更多 CDI bean?

2023-12-01

Note:类似的问题已经在三年前被问过,在 EE 6 的时候,请参阅如何为一个类实例化多个 CDI/Weld bean?有什么变化吗EE 7?

在 Spring 中,可以通过在 xml conf 中定义相应的 bean 来实例化任何类。也可以实例化一堂课更多的豆子具有不同的参数......

是否可以在 CDI 中执行此操作,我的意思是创建一个实例而不创建另一个类?

弹簧示例:

<bean id="foo" class="MyBean">
    <property name="someProperty" value="42"/>
</bean>
<bean id="hoo" class="MyBean">
    <property name="someProperty" value="666"/>      
</bean>

我将为 MyBean 创建限定符 FooQualifier、HooQualifier 和 Producer,如下所示:

@ApplicationScoped
public class MyBeanProducer {

    @Produces
    @FooQualifier
    public MyBean fooProducer() {
        return new MyBean(42);
    }

    @Produces
    @HooQualifier
    public MyBean hooProducer() {
        return new MyBean(666);
    }
}

那么如果你在某个地方这样做:

    @Inject
    @FooQualifier
    private MyBean foo;

您将拥有 foo.getSomeProperty() 等于 42 的 MyBean 实例,如果您这样做:

@Inject
@HooQualifier
private MyBean hoo;

您将拥有 foo.getSomeProperty() 等于 666 的 MyBean 实例。

另一种可能性是有一个可配置的限定符:

@Target( { TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
@Qualifier
public @interface ConfigurableQualifier {

    @Nonbinding
    int value() default 0;
}

然后是生产者方法:

@Produces
@ConfigurableQualifier
public MyBean configurableProducer(InjectionPoint ip){
    int somePropertyValue = ip.getAnnotated().getAnnotation(ConfigurableQualifier.class).value();
    return new MyBean(somePropertyValue);
}

然后简单地调用:

@Inject
@ConfigurableQualifier(value = 11)
private MyBean configurableBean;

将导致 MyBean 实例的 someProperty 等于 11。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为一个类实例化更多 CDI bean? 的相关文章

随机推荐

  • 如何发送POST和GET请求?

    我想发送我的JSON到一个 URL POST and GET NSMutableDictionary JSONDict NSMutableDictionary alloc init JSONDict setValue myValue for
  • 无法在更新面板之外更新标签

    我花了很多时间研究如何在更新面板之外更新标签 终于找到了一些东西 但它不更新标签 如果我们刷新页面就可以正常工作了 请让我知道代码中的错误或任何新的方法 请在下面找到我的代码 我认为需要为脚本管理器或 dataItem 添加更多代码 谢谢各
  • C 中的 Python 实例方法

    考虑以下 Python 3 x 代码 class Foo object def bar self pass foo Foo 如何用C语言编写相同的功能 我的意思是 如何使用 C 中的方法创建对象 然后从中创建一个实例 Edit 哦对不起 我
  • Web服务客户端,我应该保留服务还是端口实例?

    我正在开发网络服务客户端cxf codegen plugin它正在生成类MyService extends Service对于客户端部分 我现在的问题是 当我创建客户端时 我应该MyService每次我想发送请求或保留它并每次创建端口时都创
  • Java中的字符串数组初始化[重复]

    这个问题在这里已经有答案了 如果我声明一个String array String names new String 3 那么为什么我们不能像这样给上面声明的数组赋值 names Ankit Bohra Xyz 申报时您可以进行以下操作 St
  • Delphi XE6 - 使用“USE_INDY”构建的 SOAP 通过代理问题连接到 Web 服务

    我有一个使用连接到网络服务的应用程序THttpRio成分 Web服务有基本的身份验证 我使用 USE INDY 指令编译了 Delphi SOAP 单元 以便 THttpRio 组件使用 WinHttp 现在我需要通过代理访问我的网络服务
  • 尝试使用 Swift AVPlayer 播放音频

    这是我当前的视图控制器 import UIKit import AVFoundation class SecondViewController UIViewController override func viewDidLoad var p
  • 重叠的 AWT 线和 Swing JLabels

    我在使用线基元的应用程序中遇到问题JLables 我尝试解释一下 我必须使用线条来代表道路来绘制车辆路线JLabels来代表城市 我需要使用JLabels因为每个 JLabel 都有一个监听器 用于显示包含城市信息的对话框 我重新定义pai
  • 如果返回值被忽略,如何发出警告?

    我想查看我的代码 C 中忽略函数返回值的所有位置 我怎样才能做到这一点 使用 gcc 或静态代码分析工具 错误代码示例 int f int z return z z 2 z 3 z z 23 int main int i 7 f i lt
  • Ajax 会话丢失

    我将 Symfony 应用程序从 Symfony 4 0 7 升级到 Symfony 4 1 之后 AJAX 调用会丢失会话值 我同时调用了大约 6 个 ajax 请求 第一个进展顺利 但其他人正在失去会话值 它仅在迁移到 Symfony
  • 用golang封装一个包

    想象一个导出一些结构和一些函数的包 如果我想围绕该包制作一个包装器 以便它可以用作插件 我是否应该重新创建嵌入旧结构的结构 例子 package foo type Foo struct Field string func DoSomethi
  • Google Fit API 配额和限制

    使用 google fit api 时是否有配额和请求限制 我想使用 google fit api 我很好奇使用它时是否有限制 您可以在以下位置检查您项目的 Fitness API 当前限制谷歌开发者控制台 我检查了当前的项目 默认限制是
  • Python - SqlAlchemy:按大圆距离过滤查询?

    我正在使用 Python 和 Sqlalchemy 在 Sqlite 数据库中存储纬度和经度值 我创建了一个混合法对于我的位置对象 hybrid method def great circle distance self other Tri
  • 导入变量命名空间

    是否可以使用这样的变量导入名称空间 namespace User Authorization Certificate use namespace 显然这不会运行use声明需要一个常量 但有解决方法吗 Edit 发现了一个 gem 仅适用于
  • Liferay 7 主题中的 jQuery 插件

    我需要一些帮助来理解 Liferay 7 主题 特别是使用 jQuery 插件 因为我遇到了与此线程相同的问题 https web liferay com community forums message boards view messa
  • 由于嵌套节点依赖关系,路径太长

    我正在使用 npm 来安装依赖项 安装完这些后 我想与非技术人员共享我的项目 并且没有 npm 所以我想在应用程序内发送 node modules 但是 由于节点嵌套了依赖项 因此它创建的文件具有很长的路径 217 个字符 node mod
  • 为什么 iTextSharp 中的 GetTextFromPage 返回的字符串越来越长?

    我正在使用最新的iTextSharpnuGet 5 5 8 中的 lib 用于解析 pdf 文件中的一些文本 我面临的问题是GetTextFromPage方法不仅返回应有的页面文本 还返回上一页的文本 这是我的代码 var url http
  • 通过 C# 代码执行 Powershell 命令

    我想通过 C 代码添加 Powershell 命令或脚本 什么是正确的 变量声明 默认值存储在 C 变量中 例如 在 Powershell 中我输入以下行 user Admin 我想在 C 代码中添加这一行 powershell AddSc
  • 在 Ubuntu 20.04 上安装 MySQL 时出现问题

    我正在尝试在 Ubuntu 20 04 中安装 MySQL 8 0sudo apt install mysql server 但是重新安装和使用后仍然出现此错误sudo dpkg configure a Setting up mysql s
  • 如何为一个类实例化更多 CDI bean?

    Note 类似的问题已经在三年前被问过 在 EE 6 的时候 请参阅如何为一个类实例化多个 CDI Weld bean 有什么变化吗EE 7 在 Spring 中 可以通过在 xml conf 中定义相应的 bean 来实例化任何类 也可以