- 浏览: 832894 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (363)
- 2010年3月 (3)
- 2010年4月 (3)
- Java (116)
- ExtJs (22)
- EJB3.0 (11)
- JQuery (28)
- SqlServer (5)
- Oracle (17)
- hibernate (21)
- struts2 (14)
- php (10)
- JavaScript (11)
- jbpm (6)
- spring (24)
- lucene (2)
- ibatis (7)
- C# (8)
- mysql (11)
- json (3)
- webservice (3)
- 设计模式 (1)
- jdbc (1)
- servlet (2)
- ice (6)
- 日常软件问题 (2)
- 生活 (2)
- iphone (1)
- rest (3)
- ruby (2)
- linux (13)
- quartz (1)
- poi (1)
- redis (13)
- memcached (4)
- nosql (2)
- tomcat调优 (1)
- 项目管理 (0)
最新评论
-
天使建站:
jquery里和数组相关的操作 附带具体的实例 ...
jquery对象数组 -
Cy0941:
$('#formId').form('submit',...) ...
easyui的form表单提交处理 -
shmily2038:
swifth 写道楼主,,你的命令写错啦,,[root@ser ...
centos直接yum安装nginx -
swifth:
楼主,,你的命令写错啦,,[root@server ~]# y ...
centos直接yum安装nginx -
随遇而安DXX:
...
REST
SPI(Service Provider Interface) 服务提供接口
Java的SPI机制
SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。究其思想,其实是和"Callback"差不多。“Callback”的思想是在我们调用API的时候,我们可以自己写一段逻辑代码,传入到API里面,API内部在合适的时候会调用它,从而实现某种程度的“定制”。
典型的是Collections.sort(List<t> list,Comparator super T> c)这个方法,它的第二个参数是一个实现Comparator接口的实例。我们可以根据自己的排序规则写一个类,实现此接口,传入此方法,那么这个方法就会根据我们的规则对list进行排序。
把这个思想扩展开来,我们用SPI来重新实现上面的例子。客户把自己的排序规则写成一个类,并且打包成Jar文件,这个Jar文件里面必须有META-INF目录,其下又有services目录,其下有一个文本文件,文件名即为接口的全名:java.util.Comparator。
--META-INF
--services
--java.util.Comparator
文件内容只有一行:
com.company1.ComparatorProvider
这一行是你实现了Comparator接口的类的全名,它的代码如下:
package com.company1;
import java.util.Comparator;
import com.mycompany.myapp.MyItem;
public class ComparatorProvider implements Comparator<myitem>{
@Override
public int compare(MyItem o1, MyItem o2) {
//依据name排序
return o1.getName().compareTo(o2.getName());
}
}
编译打包后,把它放到你的主程序的class path里。下面是你的主程序:
//从class path中所有Jar的META-INF目录中搜索,找到合适的类并加载。
private static ServiceLoader<comparator> serviceLoader
= ServiceLoader.load(Comparator.class);
public static void main(String[] args)
{
List<myitem> myList = new ArrayList<myitem>();
myList.add(new MyItem(2,"c","hhh"));
myList.add(new MyItem(3,"k","ooo"));
myList.add(new MyItem(4,"d","ppp"));
myList.add(new MyItem(5,"b","ggg"));
showList(myList);
Collections.sort(myList,getCompartor());
showList(myList);
}
@SuppressWarnings("unchecked")
private static Comparator<myitem> getCompartor() {
for(Comparator service : serviceLoader)
{
return (Comparator<myitem>)service;
}
return null;
}
要注意的是serviceLoader开始只是加载类,实例化要到第一次用的时候。类MyItem和方法showList并不重要,所以你不必在意。你可以按照这个规则,写另外一个排序规则的Jar,随时可以更换你的排序规则.
</myitem></myitem></myitem></myitem></comparator></myitem></t>
发表评论
-
Jackson2.x通用工具类
2014-11-03 11:38 4904import java.io.IOException; i ... -
面试题
2013-02-27 09:04 1707从1加到100(考虑减少循环次数)使用数学公式 首先要知道 ... -
单例延迟实例化
2013-01-23 08:55 13271.如果出于性能的考虑而需要对实例域使用延迟初始化,就使用双 ... -
java中重载与重写的区别
2013-01-21 10:03 925首先我们来讲讲:重载(Overloading) ( ... -
自定义标签
2012-12-15 12:58 997package com.fsti.tag; import ... -
JAXB格式化beanToXml
2012-12-14 15:03 1274context = JAXBContext.n ... -
面向对象的特征有哪些方面?
2012-12-13 09:36 1007计算机软件系统是现实 ... -
java nio缓冲器
2012-12-05 17:03 3603缓冲器仅仅是一个" 多功能 " 的数组。可 ... -
面向对象三大特性一句话概括
2012-12-04 15:58 1553封装可以隐藏实现细节,使得代码模块化; 继承可以扩 ... -
Java序列化高级认识
2012-12-04 09:13 1065将 Java 对象序列化为二进制文件的 Java 序列化技术是 ... -
面向接口编程——提升系统多态性和可扩展性
2012-12-03 14:10 1284接口的本质 接口,在表面上是由几个没有主体代码的方 ... -
面向对象之多态
2012-11-23 19:22 874多态性(polymorphisn)是允许你将父对象设置成为和一 ... -
我对"秒杀"在技术性上的一些看法
2012-11-22 11:31 1011秒杀,是指电子商务 ... -
项目编码
2012-11-16 13:59 1157看两个项目所用的编码是否一样 Java的乱码问题: ... -
SVN错误:Attempted to lock an already-locked dir
2012-11-07 09:08 1027出现这个问题后使用“ ... -
面向对象的三个基本特征
2012-11-04 08:31 1087面向对象的三个基本特征是:封装、继承、多态。 封装 封装最 ... -
预编译防sql注入
2012-11-03 20:23 1972prepareStatement会先初始化SQL,先把这个SQ ... -
Java类与对象的初始化
2012-10-19 09:33 896Java类与对象的初始化 面试的时候,经常会遇到这样的笔试题 ... -
commons bean
2012-10-19 09:15 889这是两个javabean对象 package com.bea ... -
java工具DateUtil
2012-10-12 14:42 1052//一年内的周一 public final class Da ...
相关推荐
文件格式英文缩写大全 本篇文章将详细介绍各种文件格式的英文缩写,包括音频、图象、压缩、文档、执行、数据库、网页、字体、电影、动画、配置、电子电路图设计等多种文件类型的英文缩写。 音频文件格式:aiff...
各类软件开发文档的英文缩写 各类软件开发文档的英文缩写 各类软件开发文档的英文缩写 各类软件开发文档的英文缩写
为了使公司内部的英语使用规范化,本文件《公司常用英语简写》旨在为COM制造工程部的员工提供一个学习材料,包含企业中常用的英语缩写和专业词汇。 文件首先介绍了“企业常用缩写”,这是为了让员工熟悉企业内部...
在IT领域,特别是网络工程师考试中,掌握一系列专业术语及其英文缩写是非常重要的。下面将对标题和描述中提到的一些关键概念进行详细解释。 首先,SNA(System Network Architecture)是IBM开发的一种网络体系结构,...
在深入探讨SIEMENS PLC(Programmable Logic Controller,可编程逻辑控制器)的常用英语缩写之前,我们有必要先理解PLC的基本概念及其在工业自动化领域的重要地位。PLC是一种专为工业环境设计的计算机系统,用于控制...
电子元件英文缩写 常用电子元件英文缩写是电子技术中非常重要的一部分,了解这些缩写可以帮助我们更好地理解电子电路的工作原理和设计。下面是常用电子元件英文缩写的详细解释: 1. 电源:Voltage Source(VS) ...
本文将基于给定的文件信息,深入探讨编程或数据库表及其字段命名时可以使用的英文缩写,并对这些缩写的意义进行详细的解释。 ### 1. ABS - Anti-block Brake System ABS是一种汽车制动系统,用于防止车辆在紧急制动...
全世界国家及其英文缩写数据库.sql 可以直接在sqlserver里运行
### 计算机英语缩写简写术语宝典 #### 描述 本资料汇集了大量的计算机领域内常用的术语简语,采用“缩写—全称—中文解释”的形式编排,便于用户快速查找与理解。尤其适合在网络不便的情况下,作为查询工具使用。 ...
这篇文档主要介绍了一些常见的英文缩写,这些缩写在日常交流、互联网聊天、社交媒体和电子邮件中...还有其他许多类似的缩写,它们在日常英语交流中非常常见,了解并掌握这些缩写能帮助我们更好地理解和参与英文对话。
在IT领域,尤其是在Java开发技术中,掌握一系列的英文缩写是至关重要的,因为它们不仅构成了编程语言的基础,还代表了各种技术、概念和最佳实践。以下是对标题“编程中常遇到的英文缩写”及描述中提及的缩写进行的...
公司部门英文缩写简称大全 在本资源中,我们可以找到许多公司部门的英文缩写简称。这些缩写简称是公司内部使用的简称,用于快速地表达和交流。下面我们将对这些英文缩写简称进行详细的解释和分类。 总公司 * Head...
在IT行业中,各种职位的英文缩写是必不可少的专业术语,特别是在全球化的背景下,了解这些缩写对于跨文化交流和国际合作至关重要。以下是一些常见的IT职位英文缩写及其详细解释: 1. CEO (Chief Executive Officer)...
在汽车领域,了解各种英文缩写对于理解和维护车辆至关重要。以下是一些常见汽车英文缩写的详细解释: 1. **Tiptronic**: 这是一种自动变速器,允许驾驶员手动选择换挡点,提供部分手动驾驶的乐趣。 2. **...
在企业运营中,掌握常见的公司部门英文缩写简称是非常重要的,尤其对于刚入职的员工来说,这有助于快速融入工作环境并有效地与同事沟通。以下是一些常见的公司部门及其英文缩写,这些信息对于理解公司的组织架构和...
日期转换例子,支持含各种语言的三个字母缩写...适用于数据导入数据库String类型中含英文缩写转换,网上普遍使用的String to Date 都不适用含Mon Jul 等缩写,对比API,可以实现任意格式的String 类型转换成Date类型
电子电气常见英文缩写是编程时常用的英文单词缩写,新手常看技术文档有很多缩写不知道什么意思,这篇文件共6页,涵盖了电子电气领域中的常见英文缩写。 1. 交流电(AAC):Alternating Current,交流电是一种交流电压...
常用计算机术语及英文缩写 计算机术语是计算机领域中使用的专业术语,包括硬件、软件、网络、操作系统、数据库、编程语言等方面的技术词汇。这些术语对计算机专业人员和计算机爱好者来说非常重要,它们是计算机领域...
Cisco思科常用英文缩写及英语单词大全(中英文)