一、概念
什么是服务提供者框架?
多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从多个实现中解耦出来(来自百科)。是不是很晦涩呀,其实简单说来就是:提供者为框架的用户提供了多个API实现,框架必须提供一种机制来注册这些实现以便用户能够使用它们;框架的客户直接使用API,无需关心自己到底在使用哪个实现。
二、实现原理
一般有三个组件组成:
1、服务接口(Service Interface),由服务提供者实现。
2、提供者注册API(Provider Registration API),这是系统用来注册实现,让客户端访问他们的。
3、服务访问API(Service Access API),是客户端用来获取服务的实例的。
4、(可选) 服务提供者接口(Service Provider Interface),这些服务提供者负责创建其服务实现的实例。如果没有Service Provider Interface,可以通过类名进行注册,并通过反射进行实例化。
下面用UML中的类图表示其中的关系:(对图我就不做说明了,可以对照下面的代码看)
三、案例
例如JDBC(Java数据库连接,Java Database Connectivity)API。
四、自己写的Demo
1、服务接口(Service Interface)
服务者接口
package com.lzw.service; /** * 服务者接口 */ public interface IService { /** * 实现方法doService4Test1() */ public void doService4Test1(); /** * 实现方法doService4Test2() */ public void doService4Test2(); }
服务者实现类
package com.lzw.service.impl; import com.lzw.service.IService; /** * 服务者接口实现类 */ public class ServiceImpl implements IService { /** * 实现方法doService4Test1() */ public void doService4Test1() { System.out.println("do service for test1 ..."); } /** * 实现方法doService4Test2() */ public void doService4Test2() { System.out.println("do service for test2 ..."); } }
2、提供者注册API(Provider Registration API)
提供者接口
package com.lzw.provider; import com.lzw.service.IService; /** * * 提供者接口 * */ public interface IProvider { /** * * 關聯IService,用來獲取服務者接口(一般用來實現面向接口的編程) */ public IService getService(); }
提供者实现类
package com.lzw.provider.impl; import com.lzw.manager.ServiceManager; import com.lzw.provider.IProvider; import com.lzw.service.IService; import com.lzw.service.impl.ServiceImpl; /** * * 提供者接口的实现类 * */ public class ProviderImpl implements IProvider { /** * 实现静态的注册 */ private static final String DEFAULT_PROVIDER = "test"; static { ServiceManager.registerProvider(DEFAULT_PROVIDER, new ProviderImpl()); } /** * * 關聯IService,用來獲取服務者接口(一般用來實現面向接口的編程) */ public IService getService() { return new ServiceImpl(); } }
3、服务访问API(Service Access API)
服务访问管理类
package com.lzw.manager; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.lzw.provider.IProvider; import com.lzw.service.IService; public class ServiceManager { /** * 私有无参数构造器 */ private ServiceManager() { } /** * */ private static final Map<String, IProvider> providers = new ConcurrentHashMap<String, IProvider>(); public static void registerProvider(String name, IProvider p) { providers.put(name, p); } /** * * 关联IService,通过提供者来获取服务者接口 * * */ public static IService getService(String name) { IProvider p = providers.get(name); if (p == null) { throw new IllegalArgumentException( "No provider registered with name:" + name); } return p.getService(); } }
4、客户端测试类
package com.lzw; import com.lzw.manager.ServiceManager; import com.lzw.service.IService; /** * * 客户端测试类 * */ public class Client { /** * @param args * @throws ClassNotFoundException */ public static void main(String[] args) throws ClassNotFoundException { Class.forName("com.lzw.provider.impl.ProviderImpl"); IService service = ServiceManager.getService("test"); service.doService4Test1(); service.doService4Test2(); } }
一大早起来到现在总算把这个笔记写完了,Congratulation!
相关推荐
总的来说,《Effective Enterprise Java》是一本全面而深入的指南,无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和实践经验,提升你在企业级Java开发领域的专业技能。通过阅读并实践书中的建议,你...
《Effective Enterprise Java》是一本深度探讨企业级Java应用开发的经典著作。这本书主要针对J2EE(Java 2 Platform, Enterprise Edition)平台,旨在提供一系列实用的编程指导和最佳实践,帮助开发者编写出高效、...
《Effective Enterprise Java》是一本深度探讨企业级Java开发实践的权威教材。这本书旨在帮助开发者提升在企业级Java应用开发中的效率和代码质量,通过一系列经过验证的编程实践和设计原则,提供了一套实用的指导...
随着Java成为主流计算平台上的首选语言之一,企业和个人都在积极采用Java来构建大型系统。然而,构建这样的系统并非易事,尤其是在处理并发访问、数据一致性和扩展性等问题时。 **核心问题:** - **并发访问策略:*...
企业级Java平台技术(如J2EE、Java EE、Jakarta EE)提供了丰富的框架和服务,用于解决企业级应用的复杂问题: - **Web服务与消息通信**:了解SOAP、RESTful API、gRPC等Web服务技术,以及JMS、AMQP等消息通信协议...
### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。...- Spring是一个开源框架,提供了一整套的企业级服务解决方案...
《Effective Enterprise Java》是一本备受推崇的编程指南,专注于提高Java在企业级应用中的效率和质量。这本书由著名软件工程师撰写,旨在帮助开发者理解和掌握Java平台的核心特性,并提供了一套实用的编程准则和...
Java学习之路是一个全面而深入的探索,尤其对初学者来说,是掌握这门语言的关键所在。Java作为一种广泛应用的编程语言,其重要性不言而喻,不仅在企业级应用开发中占据主导地位,而且在网络服务、移动应用以及大数据...
5. **Guy Steele** - 作为Java语言规范的主要撰写者之一,Steele对Java的语法和特性有着深刻影响。 6. **Anne Stepanek** - JavaSoft的早期成员,她在Java教育和推广方面做出了大量工作,推动了Java在全球的普及。 ...
《Effective Enterprise Java》是一本深度探讨企业级Java开发实践的权威书籍,中文版名为《Effective.Enterprise.Java.Chinese.eBook.CN》。这本书由多位经验丰富的Java开发者共同编写,旨在帮助程序员提高Java在...
- **简介**: Hibernate是Java领域中流行的ORM框架之一,本书提供了丰富的案例和实战经验,帮助读者掌握Hibernate的核心技术。 5. **《Struts 2.1权威指南》** - **简介**: Struts 2是Java Web应用开发中常用的...
2. **Java EE**:Java EE是企业级应用开发的平台,它构建在Java SE(标准版)之上,增加了对分布式应用、数据库访问、Web服务等功能的支持。Java EE API帮助文档详细介绍了EJB(Enterprise JavaBeans)、Servlet、...
市面上有许多优秀的Java教材,如《Java核心技术》、《Effective Java》、《Thinking in Java》等,这些书籍覆盖了从基础语法到高级主题的广泛内容,适合不同水平的学习者。此外,网上还有大量的免费资源,如官方文档...
Tomcat是Java Web应用程序中最常用的容器之一,《深入剖析Tomcat》一书详细介绍了Tomcat的工作原理以及内部机制,非常适合对Web容器感兴趣的技术人员。通过阅读本书,Java开发者可以更好地理解Tomcat是如何运行Web...
《Spring实战》是一本介绍Spring框架的优秀书籍,Spring是企业级Java应用中最流行的开源框架之一。书中通过构建一个完整的示例项目,系统地讲解了Spring框架的各个组件和功能,包括依赖注入、AOP、数据访问、MVC等。...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域,JavaEE(Java Platform, Enterprise Edition)更是占据了主导地位。本资源包含的经典Java书籍和JavaEE整理资料,为学习和提升Java技术提供了丰富的...
- **主流框架**:进一步深入学习Struts框架,这是Java Web应用中最常用的MVC框架之一。 - **数据持久层**:学习Hibernate框架,用于处理数据持久化问题。 - **应用服务器**:了解并使用Tomcat作为应用服务器部署Java...
这种特性使得Java成为企业级应用、桌面应用、移动应用、Web服务、大数据处理、云计算及游戏开发等领域的首选语言之一。 #### 开发工具与集成开发环境(IDEs) 在Java开发过程中,选择合适的集成开发环境(IDE)至...
Java必备知识点大全的内容非常丰富,涵盖了Java语言的基础知识、常用的框架以及数据库的应用等方面,是每一个Java开发者学习和面试时的重要参考。下面是对文档中各个知识点的详细解析。 基础篇: JDK常用的包:Java...