SpringBoot 插件化开发尝试

这里使用Java SPI的方式来实现插件化,而开发的插件是一般的java Project。至于更丰富的SpringBoot插件,不一定适用。

  1. 在STS新建一个java project,然后,稍微改下.classpath的文件,将文件目录改成通常的形式:
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>

然后新建一个Interface:

public interface TestInterface {
   
	String sayHello(String name);
}

然后新建一个实现类:

public class HellToInsky implements TestInterface {
   

	@Override
	public String sayHello(String name) {
   
		return "Insky say hello to " + name;
	}

}

在src\main\resources\META-INF\services目录下新建一个包含interface包名和类名的文件,例如com.qb.report.TestInterface,然后在内容中添加实现类的完整名称:
com.qb.report.HellToInsky
在这里插入图片描述
然后导出为java jar,放在硬盘某个位置:
在这里插入图片描述
2. 将interface类拷贝到我们的Springboot工程中,然后添加如下代码:

	@GetMapping("/testJar")
	public void testJar(HttpServletRequest request, HttpServletResponse response) throws IOException {
   
		log.info("classLoader={}", this.getClass().getClassLoader());
		ClassLoader cl = new URLClassLoader(new URL[] {
   new URL("file:" + "D:/test.jar")}, this.getClass().getClassLoader()) ;
		ServiceLoader<TestInterface> tests = ServiceLoader.load(TestInterface.class, cl);
		Iterator<TestInterface> it = tests.iterator();
		if (it.hasNext()) {
   
			TestInterface test = it.next();
			String ret = test.sayHello(this.getClass().getSimpleName());
			log.info("ret={}", ret);
			response.getWriter().append(ret);
		}

	}

输出结果:

classLoader=jdk.internal.loa

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值