揭秘 Quarkus 扩展开发:Jandex 与AdditionalBeanBuildItem
技术百科
WBOY
发布时间:2024-08-28
浏览: 次 欢迎全面探索 Quarkus 扩展开发中的两个关键方面:Jandex 和AdditionalBeanBuildItem。本文旨在阐明这些方法之间的差异,深入了解它们的角色、应用程序以及它们之间复杂的相互作用。最后,您将清楚地了解如何在 Quarkus 扩展中有效地运用这些工具。
1.Jandex:自动Bean发现和索引
了解 Jandex 及其作用
在 Quarkus 扩展领域,bean 是功能的构建块,上下文和依赖注入 (CDI) 是
管理他们的机制。 Jandex 是 Quarkus 武器库中的一个强大工具,可促进自动 Bean 发现和索引。
Jand
ex 索引如何工作
当 Jandex 插件集成到您的 Quarkus 扩展中时,它会扫描所有应用程序类,创建一个全面的
充满元数据的索引文件。该文件提供了类元数据、注释、继承层次结构和接口的有组织的快照。它充当类信息的集中存储库。
Jandex 在 CDI 中的作用
然而,Jandex 的作用并没有扩展到直接 CDI bean 发现。相反,它向 CDI 容器提供信息。在容器启动期间,它会深入研究 Jandex 索引来识别
潜在的 bean 以及与它们相关的注释。这使得 CDI 容器能够管理可用于注入和其他 CDI 功能的 Bean。
示例:使用 Jandex 进行自动 Bean 发现
想象一下创建一个自定义 Quarkus 扩展。通过使用 @ApplicationScoped 等特定于 CDI 的注释来注释类,Jandex 凭借其索引能力,可以轻松识别这些类并使这些类可用于 CDI。这种和谐的集成简化了扩展过程并确保精确的 bean 识别。
2.AdditionalIndexedClassesBuildItem:显式 Jandex 索引
了解AdditionalIndexedClassesBuildItem
如果您寻求对类索引的更多控制,AdditionalIndexedClassesBuildItem 就会成为一个有价值的工具。它使您能够使用可能保持未索引状态的类显式增强 Jandex 索引。
何时使用AdditionalIndexedClassesBuildItem
当出于其他目的需要对典型 bean 发现之外的类进行索引时,此工具特别有用。这些类可能属于需要元数据访问的第三方库或外部工具。通过利用AdditionalIndexedClassesBuildItem,您可以保证正确的索引和元数据可用性。
AdditionalIndexedClassesBuildItem的使用
通过向AdditionalIndexedClassesBuildItem 的构造函数提供特定的类名,您可以精确指定哪些类接收元数据索引。无论注释或接口如何,您都可以控制索引过程。
示例:显式索引自定义配置类
想象一下,制作一个扩展,需要从不同来源访问配置类的元数据。这些类可能不拥有 CDI 注释,但它们的元数据仍然至关重要。通过AdditionalIndexedClassesBuildItem,您可以确保将它们包含在 Jandex 索引中,从而确保您的扩展可访问元数据。
3.AdditionalBeanBuildItem:显式Bean注册
了解AdditionalBeanBuildItem
虽然 Jandex 处理自动 Bean 发现,但您可能需要更复杂的方法。这就是AdditionalBeanBuildItem介入的地方,它使您能够显式地将类注册为CDI bean。
何时使用AdditionalBeanBuildItem
自定义实用程序类、第三方库或非常规 bean 可能需要包含在 CDI 上下文中。通过采用AdditionalBeanBuildItem,您可以强制执行bean 处理,而不管注释或自动发现。
AdditionalBeanBuildItem的使用
通过AdditionalBeanBuildItem,您可以指定要注册为bean 的类名。这种灵活性使您能够无缝合并对扩展功能至关重要的自定义 bean。
示例:将自定义实用程序类注册为 CDI Bean
想象一下构建一个提供额外错误处理实用程序的扩展。这些实用程序可能缺少 CDI 注释,但需要注入功能。 ExtraBeanBuildItem 有助于将这些实用程序显式注册为 CDI bean,从而增强了它们的可访问性。
4.组合方法:同时使用Jandex和AdditionalBeanBuildItem
组合方法的优点
利用Jandex 和AdditionalBeanBuildItem 的优势可以提供战略优势。这种混合方法在自动发现和显式控制之间取得了平衡,使您能够在享受默认发现优势的同时挑选豆类。
潜在问题和解决方案
这些方法之间的协同作用非常强大,但必须保持警惕,以避免重复的 bean 注册。自动Jandex 索引和显式AdditionalBeanBuildItem 包含之间的重叠注册可能会导致冲突。仔细协调确保无缝共存。
5. 本机构建注意事项:Jandex 和AdditionalBeanBuildItem 的影响
Jandex 和 Native Build
了解 GraalVM 的本机构建过程不会直接与 Jandex 索引相关。本机构建专注于将 Java 应用程序编译为本机二进制文件,利用编译后的 Java 类和依赖项。
AdditionalBeanBuildItem 和 Native Build
类似地,本机构建不会受到AdditionalBeanBuildItem 存在或不存在的严重影响。 Bean 注册不会显着改变本机构建结果,其重点是将应用程序编译和优化为本机二进制文件。
结论
通过这个旅程,Jandex 和AdditionalBeanBuildItem 的细微差别已经被阐明。 Jandex 在元数据提供和 CDI 执行中的作用以及AdditionalBeanBuildItem 的显式 bean 注册都得到了澄清。
记住:
Jandex 不会自动将类转换为 CDI beans;
CDI 容器至关重要。
战略性地利用这些工具,根据您的扩展需求调整选择,以无缝集成到 Quarkus 的 CDI 框架中。
# 应用程序
# 您的
# 它会
# 至关重要
# 您可以
# 创建一个
# 第三方
# 自定义
# 使您
# Java
# 构造函数
# 接口
# 继承
# 数据访问
# 本机
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10如何卸载Skype_Win10卸载Sky
- Linux如何安装Tomcat应用服务器_Linu
- 如何使用Golang实现文件加密_Golang c
- php做exe支持多线程吗_并发处理实现方式【详解
- Win10怎样卸载iTunes_Win10卸载iT
- LINUX怎么设置系统语言_LINUX修改中文环境
- 如何在同包不同文件中正确引用 Go 结构体
- Django 密码修改后会话失效的解决方案
- Windows怎样关闭锁屏广告_Windows关闭
- Python变量绑定机制_引用模型解析【教程】
- 如何在 Windows 11 中使用 AlomWa
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- Win11开机Logo怎么换_Win11自定义启动
- php订单日志怎么记录发货_php记录订单发货操作
- Win11系统占用空间大怎么办 Win11深度瘦身
- Win11如何更改用户账户文件夹名称 Win11修
- Windows Defender扫描失败怎么办_安
- 如何高效识别并拦截拼接式恶意域名 spam
- Go 中 defer 语句在 goroutine
- php打包exe后无法写入文件_权限问题解决方法【
- c# Task.ConfigureAwait(tr
- 如何在Golang中处理通道发送接收错误_防止阻塞
- Windows 11无法安全删除U盘提示设备正在使
- Win11怎么设置任务栏图标大小_Windows1
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- C#怎么创建控制台应用 C# Console Ap
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- VSC怎样在Linux运行PHP_Ubuntu系统
- Windows10如何更改鼠标图标_Win10鼠标
- Python装饰器复用技巧_通用能力解析【教程】
- Win11如何暂停系统更新 Win11暂停更新最长
- Win11怎样安装网易云音乐_Win11安装网易云
- c# 在高并发场景下,委托和接口调用的性能对比
- Windows10如何查看蓝屏日志_Win10使用
- Win11怎么关闭自动调节亮度_Windows11
- C++ static_cast和dynamic_c
- Win11怎么设置任务栏大小_Windows11注
- MySQL 中使用 IF 和 CASE 实现查询字
- Win11如何设置电源计划_Win11电源计划优化
- c++怎么使用std::filesystem遍历文
- Win11用户账户控制怎么关_Win11关闭UAC
- Windows服务启动类型恢复方法_错误修改导致的
- 微信JSAPI支付回调PHP怎么接收_处理JSAP
- Python函数参数高级用法_默认值与可变参数解析
- php怎么下载安装后无法解析php文件_服务器配置
- Windows系统时间服务错误_W32Time服务
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- Win11怎么设置按流量计费_Win11限制后台流
- Python对象比较与排序_魔术方法解析【教程】
- 如何使用Golang理解结构体指针方法接收者_Go

QQ客服