`
momsbaby1986
  • 浏览: 33944 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ServiceLoader服务加载

 
阅读更多

首先定义一个接口:

package com.peter.sl;

public interface Sl {

	public void say();
}

  

将接口打包成jar文件

 

新建一个工程,SlImpl实现接口Sl

package com.peter.sl;

public class SlImpl implements Sl {

	@Override
	public void say() {
		System.out.println("this class is loaded by ServiceLoader");
	}

}

 

工程下要求有META-INF/services/文件夹,此文件夹下有文件名为com.peter.sl.Sl即接口的全名,文件内容为实现类全名com.peter.sl.SlImpl,若有多个,换行分开即可。

 

测试一下:

 

package com.peter.sl;

import java.util.ServiceLoader;

public class ServiceLoaderTes {

	public static void main(String[] args) {
	
		ServiceLoader<Sl> loader = ServiceLoader.load(Sl.class);
		for(Sl sl : loader){
			sl.say();
		}
	}
}

 

 

输出:

this class is loaded by ServiceLoader

分享到:
评论
1 楼 cometzb 2012-03-07  
   

相关推荐

    java.util.ServiceLoader demo

    `ServiceLoader`实现了迭代器模式,可以按需加载服务提供者,这种特性被称为懒加载。这意味着只有在调用`iterator()`方法或`next()`方法时,服务提供者才会被加载。这种设计避免了在应用启动时一次性加载所有服务,...

    ServiceLoader的使用

    - ServiceLoader加载服务时,只会加载一次,即首次调用`iterator()`方法后,后续的调用不会重新加载。如果需要重新加载,可以使用`reload()`方法。 - 默认情况下,ServiceLoader会使用当前线程的上下文类加载器(`...

    数据库jdbc驱动加载过程

    JDBC 4.0 版本引入了 Java SPI 机制来加载驱动程序,使用 ServiceLoader 机制来加载驱动程序,并将其注册到 DriverManager 中。这样,应用程序就可以使用 JDBC 驱动程序来连接到数据库并进行数据交互。

    Java SPI 机制(SPI实战+ServiceLoader源码分析+SPI 应用场景+破坏双亲委派)

    4. 使用 ServiceLoader:使用 ServiceLoader 加载和实例化提供者的实现类。 SPI 机制的破坏双亲委派: 1. SPI 机制可以破坏双亲委派,因为 ServiceLoader 可以加载第三方提供者的实现类。 2. 例如,在 JDBC 连接池...

    serviceloader:这是一个让你理解java服务加载器机制的例子

    Java服务加载器(ServiceLoader)是Java平台标准版(Java SE)中的一种设计模式,它允许应用程序使用服务提供者接口(SPI,Service Provider Interface)来动态发现和加载服务实现。这个机制使得软件组件之间可以...

    Java类加载及SPI机制.zip

    开发者可以通过在类路径下的META-INF/services目录下创建以服务接口全限定名命名的文本文件,文件内容列出实现了该接口的所有类,然后使用ServiceLoader类加载这些服务提供者。这种方式使得框架或库可以在运行时动态...

    Java类加载及SPI机制.pdf

    接着检查传入的加载器实例是否为null,如果为null,则使用当前线程的上下文类加载器来加载服务。其加载过程涉及到读取指定路径下的配置文件,解析服务接口的实现类全限定名,并通过类加载器加载对应的类。 总的来说...

    详谈ServiceLoader实现原理

    ServiceLoader是Java中的一种服务加载机制,它允许我们根据接口动态发现并加载实现类,而无需显式地通过Class.forName或者反射等方式进行实例化。这个机制主要基于Java的SPI(Service Provider Interface)服务提供...

    java spi实现工程

    - **加载服务**:通过`java.util.ServiceLoader`加载服务,该类会读取配置文件并实例化所有服务提供者。 3. **关键组件** - **ServiceLoader**:Java SPI的主要加载工具,用于查找、加载和实例化服务提供者。 - ...

    通过SPI实现动态加载外部jar的实现类

    然而,需要注意的是,`ServiceLoader`是懒加载的,首次调用`load()`方法时才会加载服务提供者,且加载过程是线程安全的。 此外,SPI还支持使用自定义加载器,可以通过实现`java.util.ServiceLoader.Provider`接口...

    最简spi示例工程 eclipse

    接口下对应多个服务,使用ServiceLoader来加载; 3. 需要给ServiceLoader指定要加载的服务完整类名; 4. 指定类名的方法是在 src/META-INF/目录下放置一个接口名字的文件,里面存实现了接口的服务类名; 5. 文件...

    spring-boot-java-util-service-loader:使用java.util.ServiceLoader的示例Spring Boot应用程序在类路径上动态加载所有SPI实现

    使用java.util.ServiceLoader示例Spring Boot应用程序在类路径上动态加载所有实现。 多项目Gradle构建 1个Spring Boot应用 1个SPI项目 2个SPI实施项目 有关java.util.ServiceLoader用法,请参见app/src/test/java/...

    在可执行jar中载入第三方jar的几个解决方法

    4. **使用`java.util.ServiceLoader`**:对于依赖于服务提供者接口(SPI)的情况,可以利用`ServiceLoader`来加载第三方JAR提供的服务。`ServiceLoader`会遍历指定的META-INF/services/目录下的文件,根据文件内容...

    java SPI机制实现服务接口和服务实现分离源码Demo

    Java SPI(Service Provider Interface)是Java平台提供的一种服务发现机制,允许JVM在运行时动态加载服务实现。这种机制使得应用程序能够与多个第三方组件进行交互,而无需在编译时硬编码具体的实现类。SPI机制的...

    SPI入门级Demo(五:服务消费者)

    5. **服务消费者**(Service Consumer):应用中的代码,使用`ServiceLoader`加载服务并调用其方法。 工作流程大致如下: 1. 应用启动时,`ServiceLoader`会读取`META-INF/services/`目录下对应接口的配置文件。 2....

    SPI基础服务提者示演示

    SPI(Service Provider Interface)是一种设计模式,常用于Java平台,允许应用程序在运行时动态发现和加载服务提供者。SPI机制使得软件组件之间可以松耦合,增强了系统的可扩展性和灵活性。在这个“SPI基础服务提者...

    spi-Demo.rar

    综上所述,"spi-Demo.rar"中的内容可能包括一个展示了如何定义服务接口、创建服务提供者、编写配置文件以及如何在应用中使用`ServiceLoader`加载服务的示例代码。通过这个Demo,学习者可以更好地理解和掌握Java SPI...

    SPI设计思想.zip

    - **初始化延迟**:`ServiceLoader`在首次使用时才会加载服务提供者,可能导致启动时的延迟。 总的来说,SPI设计思想是Java平台的一种强大工具,它允许开发者构建可扩展的系统,同时也为插件开发提供了便利。在...

    jdk spi机制

    - `ServiceLoader`加载服务时是懒加载的,首次调用`iterator()`方法时才会加载服务提供者,因此要注意初始化时的性能影响。 - 如果有多个实现类,可以通过实现`java.util.Serviceloader.Provider`接口来自定义加载...

Global site tag (gtag.js) - Google Analytics