`
liwenshui322
  • 浏览: 518938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA 服务提供者框架介绍

 
阅读更多

      服务提供者框架是指:多个服务提供者实现一个服务,系统为客户端提供多个实现,并把他们从多个实现中解耦出来。服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性。例如,JDBC,JMS等就是用了服务提供者框架

      他们之间的关系如下图:

  


 
 

   1.服务具体实现类和服务提供者实现类是服务提供者自己去实现。以JDBC为例,这2个模块由具体的数据库提供商来实现。

   2.其他三个模块是java对数据库提供商怎么实现上面2个模块的一个约束。比如:提供服务者实现类必须实现服务提供者接口。才能成功注册到服务提供者注册类。以JDBC为例,所有的数据库提供商只需要按照接口里面定义的规则来操作,都能成功地使java连上他们的数据库。

 

    下面以mysql数据库为例简单说明一下mysql数据库提供商是如何实现这些接口的。

    1.我们在java中获取mysql连接对象源代码如下:

 

   

Class.forName("com.mysql.jdbc.Driver"); 
DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");

 

 

 

       从这个地方可以看出:我们只需要更换数据库的驱动名称与建立连接的URL,用户名等信息,就可以完全切换到另外一个数据库。数据库底部怎么操作的我们不清楚,也没必要清楚。我们获取的连接对象是Connection,查看java.sql.Connection这个类,会发现它只是一个接口。我们得到的只是一个接口,怎么可能能够操作数据库呢?其实这里得到的不是Connection接口,而是它的一个实现类,只是对于客户端不可见而已。这可能就是所谓的面向接口编程,客户端只需要知道它该知道的信息,服务端告诉客户端,你可以调用哪些方法。至于具体方法怎么实现是服务端的事情,客服端就不需要管,也不需要知道了。

     下面我们看看简单的这2个语句分别做了什么事情:

      语句一: Class.forName("...")。这样一个语句会实例化一个com.mysql.jdbc.Driver类(提供服务者实现类),并将这个类的实例注册到DriverManager(服务提供者注册类)。

       语句二: 通过建立连接的URL,用户名,密码来获取建立到mysql数据库的连接。是这样的,DriverManager通过你传进来的url信息判断出你是要获取那个服务提供者提供的服务。也就是语句一已经将提供服务者实现类注册到DriverManager了,DriverManager获取到这个服务提供者实现类对象之后,通过调用它的getService(mysql里面是connect方法)方法获取到服务具体实现类对象,返回的却是java.sql.Connection接口对象(因为服务具体实现类实现了Connection接口),这样把服务具体实现类对象隐藏了。提供了很好的扩展性。

      最后,我们自己来测试一个。

      以北京地铁进出控制为例:现在北京地铁进出都是刷卡,有二种卡:1.一卡通(比如一次性冲值50元,进地铁刷一次,出地铁刷一次,扣2元)。2.一次性卡(进地铁刷一次,出地铁插入回收。)这2种卡都可以实现进出地铁功能,但实现的具体方法是有区别的:一卡通:需要获取这卡余额是多少,然后扣掉2元。如果余额不足2元怎么处理等。一次性卡则没必要了。

     服务接口源码:

 

   

/**
 * 进出地铁服务接口
 * @author Administrator
 *
 */
public interface SubWayInterface {
	
	//进入地铁
	public boolean in();
	
	//出地铁
	public boolean out();

}

 

 

   

   服务实现源码:

 

 

/**
 * 一卡通地铁进出服务实现
 * @author Administrator
 *
 */
public class SubWayImpl implements SubWayInterface {

	public boolean in() {
		System.out.println("通过一卡通进入地铁");
		/**
		 * 进行一些处理,然后返回是否放行
		 */
		return false;
	}

	public boolean out() {
		System.out.println("通过一卡通出地铁");
		/**
		 * 进行一些处理,然后返回是否放行
		 */
		return false;
	}

}

 

 

    

   服务提供者接口源码:

 

 

  

/**
 * 地铁进出服务提供者接口
 * @author Administrator
 *
 */
public interface SubwayProviderInterface {
	
	public SubWayInterface getService();

}

 

 

    服务提供者接口实现源码:

 

 

   

/**
 * 服务提供者实现类
 * @author Administrator
 *
 */
public class SubwayProviderImpl implements SubwayProviderInterface {

	static {
		ServiceManager.registerProvider("一卡通", new SubwayProviderImpl());
	}

	public SubWayInterface getService() {
		return new SubWayImpl();
	}

}

  

 

   服务提供者注册类实现源码:

 

 

  

/**
 * 服务提供者注册类
 * 
 * @author Administrator
 * 
 */
public class ServiceManager {

	private ServiceManager() {

	}

	private static final Map<String, SubwayProviderInterface> providers = new ConcurrentHashMap<String, SubwayProviderInterface>();

	public static void registerProvider(String name, SubwayProviderInterface p) {
		providers.put(name, p);
	}

	public static SubWayInterface getService(String name) {

		SubwayProviderInterface p = providers.get(name);

		if (p == null) {
			throw new IllegalArgumentException(
					"No provider registered with name:" + name);
		}

		return p.getService();

	}

}

  

 

     客户端测试类:

 

    

/**
 * 客户端测试类
 * @author Administrator
 *
 */
public class Test {

	/**
	 * @param args
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws ClassNotFoundException {
		
		Class.forName("cn.netjava.cgl.subway.SubwayProviderImpl");
		SubWayInterface swi = ServiceManager.getService("一卡通");
		swi.in();
		swi.out();
	}
}

 

   测试类Class.forName("")里面的参数你可能跟我的不同,看你服务提供者实现类放在哪个包下面了。我的是在:cn.netjava.cgl.subway包下面。

 

 

 

    

  • 大小: 66.5 KB
  • 大小: 62 KB
5
1
分享到:
评论
2 楼 iocaop 2016-08-15  
不错,写的很清晰易懂
1 楼 lord_is_layuping 2011-11-25  

相关推荐

    一个java tcp服务器的基础框架

    本框架提供了一个简单的起点,帮助开发者快速搭建自己的TCP服务。以下是对该框架的详细解析: 一、TCP基础 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过三次握手建立连接,确保数据的无丢失、...

    Java异步编程框架之Promise介绍

    Java异步编程框架Promise是用于处理异步操作的一个重要工具,尤其在Java中,Promise的概念被广泛应用于多种场景下进行高效的数据处理和结果获取。Promise框架主要作用在于简化异步编程模型,使其更加易于理解和使用...

    Java框架API大全.rar

    综上所述,"Java框架API大全.rar"为Java开发者提供了一份宝贵的资源,涵盖了Spring、Hibernate、Struts这三个重要框架的详细API,无论是初学者还是经验丰富的开发者,都能从中受益匪浅,提升开发技能,提高工作效率...

    Java分布式ETL框架

    1. **Zookeeper**:Apache Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,负责维护和跟踪服务配置、命名、提供分布式同步和组服务。在ETL中,Zookeeper可以用于管理任务分配、节点...

    JAVA实现简单RPC框架

    - **服务注册与发现**:服务提供者暴露服务接口,服务消费者通过服务注册表获取服务信息。 - **客户端代理**:客户端使用动态代理创建服务的本地代理对象,调用代理对象的方法发起远程调用。 - **请求打包**:...

    java 管理系统,采用框架构成

    Struts是Apache组织开发的一个MVC(Model-View-Controller)框架,它为Java Web应用程序提供了结构化开发的框架。在Struts中,Model代表业务逻辑,View负责展示数据,而Controller处理用户请求并协调Model和View之间...

    Java Application Service Java 应用服务框架

    Java Application Service,通常简称为Java应用服务框架,是Java开发中的一个重要概念,它为构建企业级应用程序提供了一种结构化和模块化的开发方式。这样的框架能够帮助开发者更高效地管理和组织代码,提高软件的可...

    基于Java的数据库应用框架的研究设计

    总结来说,基于Java的数据库应用框架在教育信息化中发挥着重要作用,它不仅提供高效的数据处理能力,还支持教育平台的多样化功能,如资源管理、教学活动组织、交流互动和学习评估。通过深入研究和设计这样的框架,...

    JAVA TCP和UDP Socket通信框架

    TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接、不可靠但高效的数据传输方式。本框架涵盖了这两种通信模式,为开发者提供了便捷的客户端和...

    30种java技术框架图

    标题“30种java技术框架图”与描述“这个介绍的比较全面,内容比较详细 对初学者有很大帮助 欢迎下载”揭示了文档的性质——它似乎是一份图解资料,为初学者介绍了30种Java技术框架。这些框架包括了Java类加载器架构...

    java的三大框架手册

    Java的三大框架——Struts2、Hibernate和Spring,是Java Web开发中的核心组件,它们各自承担着不同的职责,共同构建了高效的企业级应用。这里我们将深入探讨这三个框架的基本概念、功能以及它们如何协同工作。 首先...

    dubbo服务提供者的web应用实例

    【标题】"Dubbo服务提供者的Web应用实例"是一个典型的分布式服务架构中的示例,它展示了如何将一个Java Web应用程序转化为服务提供者,利用Apache Dubbo框架对外提供服务。Dubbo是一个高性能、轻量级的开源Java RPC...

    计算机专业Java外文翻译 中文+英文(Spring框架介绍)

    总的来说,Spring框架以其丰富的功能和高度的灵活性,为Java开发者提供了一个统一的应用程序构建平台。无论是对于初学者还是经验丰富的开发者,Spring都能帮助他们更高效、更优雅地编写和管理代码,实现复杂业务逻辑...

    JAVA三大框架帮助文档大全

    **Spring** 框架是Java企业级应用开发的核心框架,它不仅包含了MVC的实现,还提供了依赖注入(DI)和面向切面编程(AOP)等功能。Spring的DI使得对象间的依赖关系得以解耦,提高了代码的可测试性和可维护性。AOP则...

    基于Java的服务框架 Dubbo.zip

    Java服务框架Dubbo是阿里巴巴开源的一款高性能、轻量级的分布式服务治理框架,它主要解决的是企业内部微服务之间的通信问题。本压缩包"基于Java的服务框架 Dubbo.zip"包含了与Dubbo相关的各类资料,旨在帮助开发者更...

    JAVA实的RPC框架

    在RPC框架中,服务提供者可以在Zookeeper上注册自己的服务,而服务消费者则可以通过Zookeeper查找并获取服务提供者的地址,实现服务的动态发现和负载均衡。 Spring框架的集成也是许多RPC实现的选择,它提供了强大的...

    JAVA框架核心技术笔记

    在Java框架方面,Spring框架是最具代表性的,它是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能。Spring MVC是Spring的一部分,用于构建Web应用程序。它通过解耦控制器、视图、...

    java三大框架

    框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是 ·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 ...

Global site tag (gtag.js) - Google Analytics