长沙网站建设软件好视通视频会议app下载
长沙网站建设软件,好视通视频会议app下载,广州网络推广招聘,怎么开网店无货源店铺开放的扩展使许多应用程序受益。 这篇文章描述了两种在Java中实现这种可扩展性的方法。 可扩展的应用 可扩展应用程序是可以扩展其功能而不必重新编译它们 #xff0c;有时甚至不必重新启动它们的应用程序。 只需将jar添加到类路径中#xff0c;或通过更复杂的安装过程来实现… 开放的扩展使许多应用程序受益。 这篇文章描述了两种在Java中实现这种可扩展性的方法。 可扩展的应用 可扩展应用程序是可以扩展其功能而不必重新编译它们 有时甚至不必重新启动它们的应用程序。 只需将jar添加到类路径中或通过更复杂的安装过程来实现。 Eclipse IDE是可扩展应用程序的一个示例。 它允许安装称为插件的扩展以便可以使用新功能。 例如您可以安装源代码管理SCM插件以与您喜欢的SCM一起使用。 再举一个例子设想一个实现了的XACML规范授权 。 XACML中的“ X”代表“可扩展”并且规范定义了许多扩展点 例如属性和类别ID结合了算法功能和策略信息点。 良好的XACML实现将允许您通过提供实现扩展点的模块来扩展产品。 服务提供商接口 Oracle用于创建可扩展应用程序的解决方案是服务提供商接口 SPI。 在这种方法中扩展点由接口定义 package com.company.application;public interface MyService {// ...
} 您可以使用ServiceLoader类找到此类扩展点的所有扩展 public class Client {public void useService() {IteratorMyService services ServiceLoader.load(MyService.class).iterator();while (services.hasNext()) {MyService service services.next();// ... use service ...}} 此扩展点的扩展可以是实现该接口的任何类 package com.company.application.impl;public class MyServiceImpl implements MyService {// ...
} 实现类必须是公共可用的并且具有公共的无参数构造函数。 但是这对于ServiceLoader类来说还远远不够。 您还必须在META-INF/services创建一个以扩展点接口的标准名称命名的文件。 在我们的示例中将是 META-INF/services/com.company.application.Myservice 此文件必须是UTF-8编码的否则ServiceLoader将无法读取它。 该文件的每一行都应包含实现扩展点的一个扩展的全限定名称例如 com.company.application.impl.MyServiceImplOSGi服务 仅当扩展点文件位于类路径上时上述SPI方法才有效。 在OSGi环境中情况并非如此。 幸运的是OSGi对于扩展性问题有自己的解决方案 OSGi服务 。 借助Declarative Services OSGi服务易于实现尤其是在使用Apache Felix 服务组件运行时 SCR的注释 时 Service
Component
public class MyServiceImpl implements MyService {// ...
} 使用OSGi和SCR使用服务也非常容易 Component
public class Client {Referenceprivate MyService myService;protected void bindMyService(MyService bound) {myService bound;}protected void unbindMyService(MyService bound) {if (myService bound) {myService null;}}public void useService() {// ... use myService ...}}两全其美 那么您应该选择两个选项中的哪个 当然这取决于您的情况。 在OSGi环境中显然应该选择OSGi服务。 如果您不在OSGi环境中则无法使用它们因此只剩下SPI。 但是如果您正在编写框架或库却又不知道您的代码是否将在基于OSGi或类路径的环境中使用该怎么办 您将希望尽可能多地使用您的库因此最好是同时支持这两种模型。 如果您要小心可以这样做。 请注意将像OSGI-INF/myServiceComponent.xml这样的Declarative Services服务组件文件添加到jar中这是SCR注释在处理时最终会完成的工作仅在OSGi环境中有效但在OSGi外部无害。 同样SPI服务文件将在传统的类路径环境中工作但在OSGi中是无害的。 因此这两种方法实际上是互斥的并且在任何给定的环境中这两种方法中只有一种会找到任何东西。 因此您可以编写使用这两种方法的代码。 这有点重复但是它允许您的代码在两种类型的环境中都能工作因此您也可以吃蛋糕。 参考 如何从安全软件开发博客上的JCG合作伙伴 Remon Sinnema 创建可扩展Java应用程序 。 翻译自: https://www.javacodegeeks.com/2012/12/how-to-create-extensible-java-applications.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87512.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!