代码拉取完成,页面将自动刷新
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"));
}
}
通过本项目可以灵活的实现扩展点,提高代码的灵活性和可扩展性能。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。