- 浏览: 1597809 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
The META-INF directory
The following files/directories in the META-INF directory are recognized and interpreted by the Java 2 Platform to configure applications, extensions, class loaders and services:- MANIFEST.MF
- INDEX.LIST
- x.SF
- x.DSA
- services/
这里指出了jar包的典型的目录结构。简单翻译:
META-INF目录中的下列文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务:
• MANIFEST.MF:清单文件,用来定义与扩展和数据包相关的数据。
• INDEX.LIST:这个文件由JAR工具的新“-i”选项生成,其中包含在一个应用程序或扩展中定义的数据包的地址信息。它是JarIndex的一部分,被类加载器用来加速类加载过程。
• x.SF:JAR文件的签名文件。x代表基础文件名。
• x.DSA:这个签名块文件与同名基础签名文件有关。此文件存储对应签名文件的数字签名。
• services/:这个目录存储所有服务提供程序配置文件。
Service Provider
Overview
Files in the META-INF/services directory are service provider configuration files. A service is a well-known set of interfaces and (usually abstract) classes. A service provider is a specific implementation of a service. The classes in a provider typically implement the interfaces and subclass the classes defined in the service itself. Service providers may be installed in an implementation of the Java platform in the form of extensions, that is, jar files placed into any of the usual extension directories. Providers may also be made available by adding them to the applet or application class path or by some other platform-specific means.A service is represented by an abstract class. A provider of a given service contains one or more concrete classes that extend this service class with data and code specific to the provider. This provider class will typically not be the entire provider itself but rather a proxy that contains enough information to decide whether the provider is able to satisfy a particular request together with code that can create the actual provider on demand. The details of provider classes tend to be highly service-specific; no single class or interface could possibly unify them, so no such class has been defined. The only requirement enforced here is that provider classes must have a zero-argument constructor so that they may be instantiated during lookup.
Provider-Configuration File
A service provider identifies itself by placing a provider-configuration file in the resource directory META-INF/services. The file's name should consist of the fully-qualified name of the abstract service class. The file should contain a newline-separated list of unique concrete provider-class names. Space and tab characters, as well as blank lines, are ignored. The comment character is '#' (0x23); on each line all characters following the first comment character are ignored. The file must be encoded in UTF-8.Example
Suppose we have a service class named java.io.spi.CharCodec. It has two abstract methods: public abstract CharEncoder getEncoder(String encodingName);
public abstract CharDecoder getDecoder(String encodingName);
Each method returns an appropriate object or null if it cannot translate the given encoding. Typical CharCodec providers will support more than one encoding.
If sun.io.StandardCodec is a provider of the CharCodec service then its jar file would contain the file META-INF/services/java.io.spi.CharCodec. This file would contain the single line:
sun.io.StandardCodec # Standard codecs for the platform
To locate an encoder for a given encoding name, the internal I/O code would do something like this:
CharEncoder getEncoder(String encodingName) {
Iterator ps = Service.providers(CharCodec.class);
while (ps.hasNext()) {
CharCodec cc = (CharCodec)ps.next();
CharEncoder ce = cc.getEncoder(encodingName);
if (ce != null)
return ce;
}
return null;
}
The provider-lookup mechanism always executes in the security context of the caller. Trusted system code should typically invoke the methods in this class from within a privileged security context.
介绍:
在META-INF/services目录下保存的是service provider的配置文件。 服务在应用中会是一个接口(更多的是抽象类)。
一个类服务器提供者实现了一个服务类。这类的服务提供类可以以扩展的形式发布到平台上。所以,jar文件引入了扩展目录,同样你也可以将服务提供者加入classpath提供访问。
服务都是表现为一个积累,而一个服务提供者通常是集成或实现了服务定义类。服务提供类通常不会像代理类一样为了正常提供服务而包含了请求者的许多信息。服务提供类一般倾向于高集成。
对这类服务提供类的唯一强制性要求就是必须有一个无参的构造函数。
provider 配置文件
META-INF/services目录作为provider配置文件的存放路径。provider配置文件中必须是全类名(包含package)。配置文件可以存在space tab 换行等字符,#作为注释。
注意:provider配置文件必须是以UTF-8编码。
总结:
service provider机制为程序的动态扩展提供了契机,在应用中你可以针对接口编程,通过RTTI技术可以比较完美的解决程序之间的耦合性。相比于spring DIP机制,这也是一个不错的尝试,至少它不需要耦合spring包。
发表评论
-
yugong QuickStart
2016-03-05 01:52 0几点说明 a. 数据迁移的方案可参见设计文档,oracl ... -
阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具
2016-03-05 18:29 6546背景 08年左右,阿里巴巴开始尝试MySQL的相关 ... -
愚公performance
2016-03-02 17:29 0性能测试 全量测试 场景1 (单主键, ... -
yugong AdminGuide
2016-03-02 16:40 0环境要求 操作系统 数据库 迁移方案 部署 ... -
Tddl_hint
2014-01-27 13:52 0背景 工作原理 Hint格式 direct模 ... -
tddl5分库规则
2014-01-26 14:41 0背景 工作原理 构建语法树 元数据 基于 ... -
tddl5优化器
2014-01-22 15:12 0背景 工作原理 构建语法树 元数据 抽象语 ... -
Canal BinlogChange(mariadb5/10)
2014-01-20 17:25 4627背景 先前开源了一个 ... -
asynload quickstart
2013-10-08 22:49 0几点说明: 1. asyncload是做为一个j ... -
网友文档贡献
2013-09-18 15:50 01. Otter源代码解析系列 链接:http://e ... -
Manager配置介绍
2013-09-16 13:00 0通道配置说明 多种同步方式配置 a. 单向同步 ... -
canal&otter FAQ
2013-09-05 17:30 0常见问题 1. canal和 ... -
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
2013-08-22 16:48 40476项目背景 阿里巴巴B2B公司,因为业务的特性 ... -
Otter AdminGuide
2013-08-19 11:06 0几点说明 otter系统自带了manager,所以简化了一 ... -
Otter高可用性
2013-08-17 23:41 0基本需求 网络不可靠,异地机房尤为明显. man ... -
Otter数据一致性
2013-08-17 23:39 0技术选型分析 需要处理一致性的业务场景: 多地修改 ( ... -
Otter扩展性
2013-08-17 22:20 0扩展性定义 按照实现不同,可分为两类: 数据处理自定 ... -
Otter双向回环控制
2013-08-17 21:37 0基本需求 支持mysql/oracle的异构数据库的双 ... -
Otter调度模型
2013-08-17 20:13 0背景 在介绍调度模型之前,首先了解一下otter系统要解 ... -
Otter Manager介绍
2013-08-16 11:16 0背景 otter4.0发布至 ...
相关推荐
7. **服务提供者接口(SPI)**:Java提供了一种机制,即服务提供者接口(Service Provider Interface),允许第三方扩展`jar`包的功能。通过在`META-INF/services`目录下放置配置文件,其他`jar`包可以声明自己为...
本压缩包包含多个版本的Dubbo jar包,这使得我们可以根据项目需求选择合适的版本进行使用。每个版本可能在功能、性能、API或兼容性上有所差异,因此了解不同版本的特点至关重要。 1. **Dubbo版本介绍**: - Dubbo ...
在下载的"spring3+cxf2.7 整合jar包"中,可能包含了Spring 3.x版本和CXF 2.7版本的库文件,以及相关的示例配置文件,这些可以帮助开发者快速搭建和运行一个Spring+CXF的环境。使用时,开发者需要根据自己的项目需求...
在Java平台上,Service Provider Interface (SPI) 是一种允许第三方开发者扩展Java应用程序的机制。它使得开发者可以为已存在的服务提供自定义实现,而无需修改原始的代码。在Java的类库中,许多接口都利用了SPI,...
- **服务治理(Service Governance)**:Dubbo的服务治理包括服务的注册与发现、调用控制、容错机制、服务降级、熔断、限流等,这些都是为了提高分布式系统在复杂环境下的健壮性。 通过这个压缩包中的文件,开发者...
13. **扩展性**:Jersey允许通过SPI(Service Provider Interface)机制添加自定义功能,如提供新的消息处理器或资源解析器。 14. **测试**:Jersey提供测试框架,使得开发者可以轻松地编写单元测试和集成测试,...
这个名为"Spring+dubbo所需的jar包"的压缩包,很显然包含了支持这两种技术协同工作的核心库。下面我们将深入探讨Spring和Dubbo各自的核心概念以及它们如何配合工作。 Spring是一个全功能的Java应用框架,以其依赖...
这个压缩包“dubbo 整套jar包”包含了一整套的Dubbo库,确保了实用性,并且版本较新,可以直接用于开发项目,免去了自行下载和配置的麻烦。 1. **Dubbo核心组件**:Dubbo的核心组件包括服务提供者(Provider)、服务...
Android应用框架是开发者构建应用程序的核心,包括Activity Manager(负责应用的启动和切换)、Content Provider(数据共享)、Intent(对象间通信)、Broadcast Receiver(广播接收器)以及Service(后台服务)等...
【Dubbo jar包】 在Java开发领域,Dubbo是一个高性能、轻量级的服务治理框架,由阿里巴巴开源并维护。它主要面向服务化架构,提供服务的注册、发现、调用、负载均衡、监控等能力,使得分布式系统开发更加便捷。在非...
1. **dubbo-api**: 这个模块包含了Dubbo的核心API,如Service、Reference、Provider、Consumer等接口,以及相关的配置注解,是开发者与Dubbo交互的基础。 2. **dubbo-remoting**: 这部分处理网络通信,实现了基于...
此外,还可以通过 SPI(Service Provider Interface)机制添加自定义功能。 6. **与其他框架的整合**: Jersey 可以与 Spring、Guice 等流行的依赖注入框架集成,也可以与 Hibernate、MyBatis 等 ORM 工具结合,...
- **SPI机制**:基于Java的Service Provider Interface(SPI),允许用户自定义实现来扩展Dubbo功能。 在Dubbo-2.8.4版本中,对性能进行了进一步优化,修复了一些已知问题,并增加了对新特性的支持,如更完善的...
后端则是用Java开发的服务端逻辑,可能涉及到认证中心(Identity Provider, IdP)和应用服务(Service Provider, SP)的交互。 Flex前端部分涉及的知识点包括: 1. Flex SDK:Flex应用程序的开发基础,它包含...
用户在身份提供者(Identity Provider,IdP)处登录后,IdP会生成一个SAML响应给服务提供者(Service Provider),服务提供者据此确认用户身份。 4. **基于OAuth和OpenID Connect**:OAuth主要用于授权,OpenID ...
CMPP(China Mobile Peer to Peer,中国移动点对点短消息协议)是运营商中国移动制定的一种高效、可靠、标准化的短消息传输协议,主要用于SP(Service Provider)与MC(Mobile Center,移动业务交换中心)之间的数据...
本篇文章将围绕Android 4.0.3 Jar包源码展开,带你探索这一版本的核心机制,帮助开发者深入了解Android系统的内部运作。 一、系统框架 Android 4.0.3的系统框架主要由以下几个部分构成: 1. 应用框架:包括Activity...
这个压缩包“dubbo全套源码和jar包2.5.3.rar”包含的是Dubbo 2.5.3版本的源代码和相应的JAR库,这对于深入理解Dubbo的工作原理和进行二次开发是非常有价值的。 首先,让我们来看看Dubbo的核心组件和关键特性: 1. ...
9. **SPI(Service Provider Interface)**:Dubbo采用Java的SPI机制,允许用户自定义扩展点,增强了框架的可扩展性。 10. **QoS(Quality of Service)**:包括流量控制、熔断机制等,确保服务在高并发场景下的...
SPI(Service Provider Interface)是Java平台的一个特性,允许第三方开发者为Java应用程序提供服务实现。 Aether库的核心功能是帮助Maven、Gradle等构建工具处理Maven仓库中的依赖关系。它能够解析POM(Project ...