该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

spring 扩展点 该项目优化了spring 扩展点的实现。在BeanPostProcessor基础上对相关的能力进行优化。

扩展点分为使用场景scene和功能点useCase。 场景:是使用的大的一个范围 功能点:一个场景下具体的使用点

具体的使用方式: 所有需要使用扩展点的接口都需要实现 IExtension 这个空接口 比如:

public interface ISelectExector extends IExtension {
    RetryTaskGroupDO bestExectorSelect(List<RetryTaskGroupDO> retryTaskGroupList);
}

具体的实现类上面需要增加注解"ExtensionAnnotation" ExtensionAnnotation具体的内容

  @Target({ElementType.TYPE})
  @Retention(RetentionPolicy.RUNTIME)
  @Documented
  @Component
  public @interface ExtensionAnnotation {


/**
 * 实现到扩展类
 *
 * @return
 */
Class<?>[] extensionClass();

/**
 * 使用场景,一个场景下会有多个case,不同的场景使用不同的描述
 *
 * @return
 */
String scene();


/**
 * 场景下具体的使用点
 *
 * @return
 */
String useCase();
}


比如实例:

@ExtensionAnnotation(extensionClass = ISelectExector.class,scene = "selectExector",useCase = "LatestHeartSelector")
public class LatestHeartSelector implements ISelectExector {
    @Override
    public RetryTaskGroupDO bestExectorSelect(List<RetryTaskGroupDO> retryTaskGroupList) {
    retryTaskGroupList.sort((o1, o2) -> o2.getHeartTime().compareTo(o1.getHeartTime()));
    return retryTaskGroupList.get(0);
    }
}

本方案的扩展点支持多个接口的实现

public class ExtensionTest extends AbstractTest {

@Autowired
private IExtensionFinder iExtensionFinder;

@Test
public void testExtension() {
    IPhone iPhone = iExtensionFinder.getExtension(ExtensionSence.valueOf( "notify", "mail"),IPhone.class);

    INotify notify = iExtensionFinder.getExtension(ExtensionSence.valueOf("notify", "ding"),INotify.class);

    notify.notifyMessage();
    System.out.println("------"+iPhone.phone("test"));
}
}

通过本项目可以灵活的实现扩展点,提高代码的灵活性和可扩展性能。

空文件

简介

spring 扩展点,在BeanPostProcessor基础上支持更灵活的方式进行扩展 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化