首先简单回忆一下springboot是如何将第三方依赖库(jar包)导入项目中的,并通过bean容器管理,实现最终的依赖注入:是通过注解@EnableAutoConfiguration实现的,通过SpringFactoriesLoader 最终扫描jar包下的META-INF/spring.factories文件,将XxxAutoConfiguration的bean装载到bean容器,实现自动配置。自动配置原理详解,点击查看:源码分析pom.xml第三方依赖如何自动配置导入Bean容器SpringFactoriesLoader-spring.factories
本文介绍如何自己实现一个组件,打成jar包,并可以在其他项目中以第三方jar包的形式引入。
一. 自己写一个jar包
- 创建一个工程,可以是maven工程。
- 在pom.xml中引入spring boot starter基础库依赖
- 自定义一个配置类,必须用@Configuration注解标识这是一个配置类。
@Bean表示该方法返回的实例将被自动装配进入bean容器。
@ConditionOnClass表示,需要项目中存在ThreadPoolExecutor类,这是jdk自带的,所以一定成立。 - 在resources路径下建立META-INF/spring.factories
spring.factories文件中写的是该jar包对外提供类/接口的全限定类名/类路径。 - 将该工程打成jar包
二. 将jar包发布到本地maven仓库,用于作为其他项目的jar包导入。
- 将jar包复制到本地的maven仓库。
- 在本地的repository路径下,启动cmd,执行命令:
mvn install:install-file -Dfile=D:\apache-maven-3.6.1\apache-maven-3.6.1\ThreadPoolStarterTest-1.0-SNAPSHOT.jar -DgroupId=org.example -DartifactId=ThreadPoolStarterTest -Dversion=1.0-SNAPSHOT -Dpackaging=jar
其中:
- -Dfile 是jar包所在本地maven仓库路径
- -DgroupId 是组织名称Id
- -DartifactId=项目名称id
- -Dversion=版本号
执行成功:
三. 在其他项目中引入(本地项目,因为jar包只发布到了本地仓库)该自己写的jar包starter
测试:
package com.example.demo.controller;
import myorg.myexample.MyThreadPoolAutoConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
@Controller
public class TraceDataDetailController {
@Autowired
private MyThreadPoolAutoConfiguration myThreadPoolAutoConfiguration;
public void test() {
//可以调用jar包中MyThreadPoolAutoConfiguration类的myStarterTest方法。
myThreadPoolAutoConfiguration.myStarterTest();
System.out.println("自定义jar中的核心线程数:"+myThreadPoolAutoConfiguration.myThreadPool().getCorePoolSize());
}
}
//打印结果:
我是ThreadPool组件的方法---