刚刚研究携程的apollo时发现ServiceLoader是个类似spring的东西,可以指定接口和实现,通过ServiceLoader去载入。 
下面是我的一个例子: 
 

package com.example.demo.ctrl;

import java.util.ServiceLoader;

/**
 * @author KING
 * @date 2018/10/12 21:18
 */
public class SayHelloMain {
    public static void main(String[] args) {
        ServiceLoader<SayHello> loder = ServiceLoader.load(SayHello.class);
        for (SayHello hello : loder) {
            System.out.println(hello.getClass());
            hello.sayHello();
        }
    }
}



依赖的SayHello可以在另外一个jar包:test.jar.也可以在本地....在test.jar里有一个接口,两个实现,MyHello和MyHello2.

package com.example.demo.ctrl;

/**
 * @author KING
 * @date 2018/10/12 21:20
 */
public class MyHello2 implements SayHello {
    @Override
    public String sayHello() {
        String msg = "---MyHello2";
        System.out.println(msg);
        return msg;
    }

}

通过在的META-INF下的services文件夹com.example.demo.ctrl.SayHello的内容

com.example.demo.ctrl.MyHello2
com.example.demo.ctrl.MyHello

文件来指定实现,多个实现的时候使用换行。 
如下图:
 

ServiceLoader的使用



注意,这个只能是打成jar之后给其他项目用,自己是不可以用自己的。 



 

相关文章:

  • 2021-06-07
  • 2021-08-08
  • 2021-10-25
  • 2021-09-28
  • 2022-12-23
  • 2021-07-11
  • 2021-09-25
猜你喜欢
  • 2021-04-14
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
相关资源
相似解决方案