如何自定义一个spring-boot-starter
开发byx-spring-boot-starter项目
首先创建一个Maven项目,名为byx-spring-boot-starter
:
<groupId>byx.spring</groupId>
<artifactId>byx-spring-boot-starter</artifactId>
<version>1.0.0</version>
引入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.4.5</version>
</dependency>
在项目中建一个包byx.spring
,在这个包下创建下面两个类:
public class Byx {
public void hello() {
System.out.println("This is byx.");
}
}
@Configuration
public class ByxConfig {
@Bean
public Byx byx() {
return new Byx();
}
}
其中,ByxConfig
是Byx
的配置类,负责向Spring容器中导入Byx
。
在resources
下创建一个META-INF
文件夹,在该文件夹下创建一个spring.factories
文件,并写入如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
byx.spring.ByxConfig
其中byx.spring.ByxConfig
是我们自定义的配置类的全限定类名。
这个文件非常重要,因为Spring项目启动时会读取所有导入的Jar包下面的META-INF/spring.factories
文件,这样Spring就能加载我们自定义的配置类。
到此,一个简单的spring-boot-starter就开发完成了,运行一下mvn deploy
把项目部署到本地Maven仓库。
使用byx-spring-boot-starter项目
创建另外一个Maven项目,并引入刚刚开发的byx-spring-boot-starter
依赖:
<dependency>
<groupId>byx.spring</groupId>
<artifactId>byx-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
创建一个启动类Main
:
@SpringBootApplication
public class Main {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Main.class);
Byx byx = context.getBean(Byx.class);
byx.hello();
}
}
运行main
函数,控制台输出如下:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.5)
2021-04-17 20:41:28.699 INFO 9836 --- [ main] byx.test.Main : Starting Main using Java 15 on DESKTOP-SLMK9HJ with PID 9836 (D:\Programs\项目-2021\byx-spring-boot-starter-test\target\classes started by byx in D:\Programs\项目-2021\byx-spring-boot-starter-test)
2021-04-17 20:41:28.703 INFO 9836 --- [ main] byx.test.Main : No active profile set, falling back to default profiles: default
2021-04-17 20:41:29.497 INFO 9836 --- [ main] byx.test.Main : Started Main in 1.295 seconds (JVM running for 1.699)
This is byx.
最后一行输出了This is byx
,说明我们的Byx
组件被成功注册到Spring的容器里了。