使用多态性通过 Jakarta CDI 注入实现

主要观点:在构建可扩展和可维护的 Java 应用时,关键挑战是在不违反“开闭原则”的情况下选择接口的正确实现,本教程将学习使用 Jakarta CDI 动态注入实现,以实现代码的灵活性和健壮性。
关键信息:

  • 传统 CDI 静态注入在编译时已知所需实现时有效,但基于运行时数据选择时需使用强制逻辑,会违反“开闭原则”。
  • Jakarta CDI 提供更好解决方案,可注册多个实现并使用自定义限定符,在运行时动态解析所需实现。
  • 具体步骤包括创建接口、定义区分实现的枚举和注解、创建注解实现类、编写返回基于类型的实现的类等。
    重要细节:
  • 接口Instrument表示可具有多种实现的行为。
  • 枚举InstrumentType用于区分乐器类型。
  • 注解@MusicInstrument用于标记实现类,其值为InstrumentType
  • MusicInstrumentLiteral类用于动态过滤类。
  • Orchestra类根据类型返回Instrument实例。
  • App类中通过SeContainer初始化并获取Orchestra实例,然后选择不同类型的乐器并打印其演奏声音。
    结论:学会利用 Jakarta CDI 的动态解析能力增强传统字段注入,创建遵循“开闭原则”的灵活可扩展代码,可在应用的不同行为基于运行时值的区域应用此模式,简化代码并便于测试、扩展和维护。
阅读 9
0 条评论