Skip to content

Latest commit

 

History

History
170 lines (129 loc) · 7.41 KB

README_zh-Hans.md

File metadata and controls

170 lines (129 loc) · 7.41 KB

auto-pipeline 🚀

English | 中文

Github Workflow Build Status Github Workflow Build Status Coverage Status Java support License Maven Central GitHub release GitHub Stars GitHub Forks GitHub issues GitHub Contributors GitHub repo size gitpod: Ready to Code

auto-pipeline 是一个代码生成器,用于自动生成组件的pipeline。帮助你保持项目更小、更简单、更具扩展性。💡

auto-pipeline 是一个用于生成 Pipeline注解处理器,灵感来自于 Google 的 Auto。❤️

更多信息,请查看 auto-pipeline 文档

快速示例

以下是一个简要介绍。详细信息请查看 示例项目 及其测试用例。

快速开始

auto-pipeline 需要 Java 8 或更高版本。

0. 添加 auto-pipeline 依赖

对于 Maven 项目:

<dependencies>
    <!--
        auto-pipeline-processor 会为接口生成 Pipeline。
        并且scope 是 "provided"的, 因为它只在编译时需要。
    -->
    <dependency>
        <groupId>com.foldright.auto-pipeline</groupId>
        <artifactId>auto-pipeline-processor</artifactId>
        <version>0.4.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

对于 Gradle 项目:

/*
 * Gradle Kotlin DSL
 */
compileOnly("com.foldright.auto-pipeline:auto-pipeline-annotations:0.4.0")
// auto-pipeline 注解处理器将为接口生成管道类
annotationProcessor("com.foldright.auto-pipeline:auto-pipeline-processor:0.4.0")

/*
 * Gradle Groovy DSL
 */
compileOnly 'com.foldright.auto-pipeline:auto-pipeline-annotations:0.4.0'
annotationProcessor 'com.foldright.auto-pipeline:auto-pipeline-processor:0.4.0'

auto-pipeline 已发布到 Maven 中央仓库,查看最新版本

1. 使用 @AutoPipeline 为接口自动生成 Pipeline

在你的接口上添加 @AutoPipeline 注解,auto-pipeline 将在编译时为该接口生成一些 Java 文件。

ConfigSource 为例:

比如名为 ConfigSource 的接口,该接口有 get() 方法,像这样:

public interface ConfigSource {
    String get(String key);
}

假设我们希望 ConfigSource#get() 具有一些扩展性,所以我们决定对其应用Pipeline模式以实现扩展。

现在就让 auto-pipeline 出场,我们只需要在 ConfigSource 上添加 @AutoPipeline

@AutoPipeline
public interface ConfigSource {
    String get(String key);
}

auto-pipeline-processor 在编译时会自动为 ConfigSourcepipeline package 中生成 Java 文件:

  • ConfigSourceHandler
    我们想要实现的责任接口以实现扩展性
  • ConfigSourcePipeline
    责任链
  • ConfigSourceHandlerContext
  • AbstractConfigSourceHandlerContext
  • DefaultConfigSourceHandlerContext

2. 为 Pipeline 实现你的处理器

我们可以实现 MapConfigSourceHandlerSystemConfigSourceHandler(它们都在 ConfigSource handler 示例 中):

public class MapConfigSourceHandler implements ConfigSourceHandler {
    private final Map<String, String> map;

    public MapConfigSourceHandler(Map<String, String> map) {
        this.map = map;
    }

    @Override
    public String get(String key, ConfigSourceHandlerContext context) {
        String value = map.get(key);
        if (StringUtils.isNotBlank(value)) {
            return value;
        }
        return context.get(key);
    }
}

public class SystemConfigSourceHandler implements ConfigSourceHandler {
    public static final SystemConfigSourceHandler INSTANCE = new SystemConfigSourceHandler();

    @Override
    public String get(String key, ConfigSourceHandlerContext context) {
        String value = System.getProperty(key);
        if (StringUtils.isNotBlank(value)) {
            return value;
        }
        return context.get(key);
    }
}

3. 使用 Pipeline

通过组合 ConfigSourceHandler 创建一个 ConfigSourcePipeline,可以作为 ConfigSource 的入口:

Map<String, String> mapConfig = new HashMap<String, String>();
mapConfig.put("hello", "world");
ConfigSourceHandler mapConfigSourceHandler = new MapConfigSourceHandler(mapConfig);

ConfigSource pipeline = new ConfigSourcePipeline()
        .addLast(mapConfigSourceHandler)
        .addLast(SystemConfigSourceHandler.INSTANCE);

现在,我们可以使用 pipeline.get(...) 来调用责任链了!🎉

pipeline.get("hello");
//  "world"

pipeline.get("java.specification.version")
// "1.8"

详细信息请查看可运行的单测用例