关于springExt捐献的问题

发布于 2021-11-12 11:40:48 字数 387 浏览 821 评论 3

@joshuazhan 你好,想跟你请教两个问题:

        1,对于扩展点的定义,是否有其他方面的约束,否则如何解决重名,如何让扩展者知道这个扩展点要实现的功能

        2.扩展点--扩展实现  在开发中的过程是怎样的,是否是  一个工程师定义了一个扩展点,另一个工程师在某个时间实现后,前者就能使用之完成业务逻辑。就好像前者定义借口,后者来实现一样?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不再见 2021-11-16 06:46:41

感谢@joshuazhan

这是在webx论坛得到的答案http://www.openwebx.org/forum/showthread.php?tid=352

旧城烟雨 2021-11-15 20:40:37

非常感谢您的回复,很详尽,非常感谢

伴我心暖 2021-11-12 18:21:45

首先是第一个

  1. 定义一个扩展点,主要的约束有,在spring.configuration-points中添加扩展点的声明,以及实现对应的DefinitionParser(SpringExt也支持Spring原生的BeanDefinitionDecorator扩展,目前我还没弄透,所以这个还没法给你很好的说明);
  2. 同时,扩展点的namespace必须以扩展点的名字结尾,扩展点的示例可以参见我的帖子在Webx中添加扩展点的示例

  3. 扩展点(Configuration Point)重名问题有好几种情况,SpringExt在初始化时会使用Java的Properties类解析所有Jar包下的spring.configuration-points,Properties解析配置时,是以配置项的名称作为Key存储在Map中的,所以后出现的配置会把前面同名配置项覆盖,在同一个spring.configuration-points配置文件中的情况较简单些,在不同Jar包中的spring.configuration-points配置文件则要看Jar包的加载顺序了,具体的解析流程你可以参看Webx的代码,在ConfigurationPointsImpl的loadConfigurationPoints方法以及PropertiesLoaderUtils的loadAllProperties方法;

  4. 另一种情况是两个扩展点的namespace重了,由于ConfigurationPointsImpl有两个Map(namespaceUriToConfigurationPoints和nameToConfigurationPoints,可参见ConfigurationPointsImpl的代码),分别存储已扩展点名称和namespace到扩展点的映射,便于查找扩展点,namespace相同的情况下会导致根据namespace查找扩展点时可能返回错误的结果,应用可能会Bug掉;
  5. 至于对扩展点的扩展(Contribution)重名问题,则和扩展点(Configuration Point)重名问题类似,可参见ConfigurationPointImpl的loadContributions方法(注意,此处ConfigurationPointImpl和之前的是不同的类,在Point后少了一个s,这里对应的是一个具体的扩展点,之前的则对应着所有扩展点的集合);
  6. 对不同扩展点的扩展,如果出现重名的情况,我觉得应该没什么问题,因为他们都已经通过扩展点进行区分了,对应着不同的namespace,不过我没验证过,有兴趣的话可以自己做下试验;
  7. 在实际开发中,添加扩展点或扩展实现的情况并不多,开发的主要工作还是在业务逻辑上,所以重名的情况也基本不会出现;
  8. 扩展点一般都会定义一个接口给“扩展实现”,目前Webx的扩展点说明还没有一个很好的文档,所以刚接触Webx的人都会比较痛苦,但随着使用的深入都会慢慢知道各个扩展点的作用,以及对应的接口定义,但还是和7一样,这种情况不太多见,绝大多数的工作量都是在业务逻辑上,框架上的工作其实不多。

第二个问题

  1. 见第一个问题的7和8两点;
  2. 有一些例外,其中Service本身就没有定义任何的接口,他其实和Spring的Bean没什么区别,绝大多数类都可以作为一个Service或是Bean;
  3. SpringExt比Spring强大的一个地方就在于把很多服务接口的限定条件直接放在配置中,开发的使用利用Schema的校验和提示就可以很方便的完成配置,不过这页带来了不少工作量,算是有利有弊吧。

只能和你说这么多,一些东西我也没完全弄清楚,所以没法保证一定正确,希望对你有帮助。又,Webx的创始人经常会在Webx的论坛上回答问题,你也可以直接去问问他,http://openwebx.org/forum/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文