Skip to content

Instantly share code, notes, and snippets.

@liweinan
Created August 14, 2018 06:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save liweinan/10d0807a6df7dd03b077bb12d55f06c9 to your computer and use it in GitHub Desktop.
Save liweinan/10d0807a6df7dd03b077bb12d55f06c9 to your computer and use it in GitHub Desktop.

首先在META-INF/services里面撰写文件,文件名为io.weli.HelloProvider

@liweinan
Copy link
Author

image

@liweinan
Copy link
Author

文件里的内容如下:

io.weli.serviceloader.HelloProviderImpl

image

@liweinan
Copy link
Author

撰写同名接口如下:

image

package io.weli.serviceloader;

import java.util.ServiceLoader;

public abstract class HelloProvider {
    public static HelloProvider getDefault() {
        ServiceLoader<HelloProvider> ldr = ServiceLoader.load(HelloProvider.class);
        for (HelloProvider provider : ldr) {
            //We are only expecting one
            return provider;
        }
        throw new Error("No HelloProvider registered");


    }

    public abstract String getMessage();

}

@liweinan
Copy link
Author

相关实现如下:

image

package io.weli.serviceloader;

public class HelloProviderImpl extends HelloProvider {

    @Override
    public String getMessage() {
        return this.toString();
    }
}

@liweinan
Copy link
Author

liweinan commented Aug 14, 2018

撰写使用代码:

package io.weli.serviceloader;

/**
 * Created by liweinan on 7/7/14.
 */
public class Main {

    /*
     * mvn exec:java -Dexec.mainClass="io.weli.serviceloader.Main"
     */
    public static void main(String[] args) {
        HelloProvider provider = HelloProvider.getDefault();
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        System.out.println(provider.getMessage());
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
    }
}

image

@liweinan
Copy link
Author

以下是执行情况:

2018-08-14 3 20 44 pm

@liweinan
Copy link
Author

liweinan commented Aug 14, 2018

核心代码在这里:

image

        ServiceLoader<HelloProvider> ldr = ServiceLoader.load(HelloProvider.class);
        for (HelloProvider provider : ldr) {
            //We are only expecting one
            return provider;
        }

@liweinan
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment