自定义starter
创建pom项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>difa</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency></dependencies></project>
定义对外接口
package org.example;/*** Des:对外接口** @author RuYi* @version 1.0.0* @create 2024/6/15 21:01*/
public interface IMyStarterService {String myStarterTest(String value);}
定义对外接口的实现类
package org.example;/*** Des:对外接口的实现类** @author RuYi* @version 1.0.0* @create 2024/6/15 21:01*/
public class MyStarterServiceImpl implements IMyStarterService {@Overridepublic String myStarterTest(String value) {return value + " My Starter";}
}
定义spring.factories
在resources目录下创建META-INF目录,在META-INF目录创建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.example.MyStarterAutoConfigure
定义自动配置类
package org.example;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Des:定义自动配置类** @author RuYi* @version 1.0.0* @create 2024/6/15 21:02*/
@Configuration
// 类路径下发现XXX.class就自动配置
@ConditionalOnClass(value = {IMyStarterService.class, MyStarterServiceImpl.class})
public class MyStarterAutoConfigure {@Bean // 实例化IMyStarterService并载入Spring IoC容器@ConditionalOnMissingBean// 当spring上下文中不存在bean时实现自动配置IMyStarterService myStarterService() {return new MyStarterServiceImpl();}}
安装Starter到本地仓库
mvn clean install -Dmaven.test.skip=true
最终结果
二、使用自定义的starter
创建普通boot项目,并在pom中,引入starter
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.example</groupId><artifactId>difa</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
查看依赖
编写测试方法
package com.example.demo;import org.example.IMyStarterService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import javax.annotation.Resource;/*** Des:** @author RuYi* @version 1.0.0* @create 2024/6/15 21:51*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class test {@Resourceprivate IMyStarterService myStarterService;@Testpublic void kk() {System.out.println(myStarterService.myStarterTest("Hello "));}
}
结果如图
参考
概念流程
SpringBoot如何自定义Starter_spring boot 自定义starter-CSDN博客
基础 到 进阶
Spring Boot之自定义Starter_springboot自定义starter-CSDN博客