听说你还不懂 Java 的服务定位器模式(Service Locator Pattern)?(上)

简介: 听说你还不懂 Java 的服务定位器模式(Service Locator Pattern)?

1 概述


当你想使用 JNDI 查询定位各种服务时,便可考虑该模式。

由于为某个服务查找 JNDI 的代价很高,服务定位器模式(后文简称为 SLP)充分利用了缓存技术。在首次请求某服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同服务时,服务定位器会在它的缓存中查找,便可极大提高应用程序的性能。



2 构成


服务(Service)

实际处理请求的服务。对该服务的引用可在 JNDI 服务器中查到

Context / 初始的 Context

JNDI Context 带有对要查找的服务的引用

服务定位器(Service Locator)

服务定位器是通过 JNDI 查找和缓存服务来获取服务的单点接触

缓存(Cache)

缓存存储服务的引用,以便复用它们

客户端(Client)

Client 是通过 ServiceLocator 调用服务的对象。


3 示例


UML 图设计

image.png


我们将创建 ServiceLocator、InitialContext、Cache、Service 作为表示实体的各种对象。Service1 和 Service2 表示实体服务。


ServiceLocatorPatternDemo,我们的演示类在这里是作为一个客户端,将使用 ServiceLocator 来演示服务定位器设计模式。


服务定位器模式的 UML 图



3.1 服务接口Service


image.png


3.2 实体服务

image.png

image.png

前两主要表现接口之间的多态性,指定行为方式。


3.3 为 JNDI 查询创建 InitialContext


工厂模式的应用,通过类名确定要实例化的对象



image.png




目录
相关文章
|
2月前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
3月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
46 5
|
3月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
187 0
Java面试题之cpu占用率100%,进行定位和解决
|
3月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
56 1
|
3月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
55 1
|
3月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
43 0
深入理解java对象的访问定位
|
4月前
|
JSON Java 数据格式
java调用服务报错400
java调用服务报错400
83 2
|
4月前
|
JSON Java 数据格式
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
128 1
|
3月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
31 0