自定义SpringBootStarter
内容纲要

自定义SpringBootStarter

命名

Spring官方建议非官方Starter命名应遵循 {name}-spring-boot-starter 的格式

Starter需要导入的依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>2.2.7.RELEASE</version>
</parent>

导入父依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>3.2.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

导入开发Starter需要的依赖

搭建Starter

Starter结构

image-20240708102209800

// 配置类,方便引入starter后直接从项目的配置文件配置Starter的属性
@ConfigurationProperties(prefix = "spring.myprops") // 引入"spring.myprops"前缀的配置
@Data
public class MyProperties {
    private String propName="test";
    private String propValue="test";
}

// Starter功能实现类,项目引入Starter后可直接调用的功能函数
@Data
@Slf4j
public class MyFunc {
    private String name;
    private String value;

    public void doMyFunc(){
        log.info("Prop Name:[{}]",name);
        log.info("Prop Value:[{}]",value);
        System.out.println("Name: "+name+"Value: "+value);
    }
}

// 配置类
@Configuration
@EnableConfigurationProperties(MyProperties.class) // 允许MyProperties自动装配配置文件
@Slf4j
public class MyAutoConfiguration {
    @Autowired
    private MyProperties myProperties;

    @Bean // 构造器注入依赖
    @ConditionalOnMissingBean
    public MyFunc getMyFunc(){
        MyFunc myFunc = new MyFunc();
        myFunc.setName(myProperties.getPropName());
        myFunc.setValue(myProperties.getPropValue());
//      myFunc.doMyFunc();
        log.info("注入");
        return myFunc;
    }
}

让Starter在被引入后生效

1. 在Starter项目的Resources文件夹下创建配置文件

image-20240708102613517

// 在spring.factories中写
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.example.MyAutoConfiguration

2. 通过自定义一个@Enable注解然后在把自动配置类通过Import注解引入进来。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({MyAutoConfiguration.class})
public @interface EnableStarter {
}

打包部署到Maven本地仓库

  • maven install
  • maven package

引用

1.创建一个SpringBoot项目,在Dependency中引用

<dependency>
    <groupId>org.example</groupId>
    <artifactId>My-Starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

2.项目启动后,会自动注入My-Starter的相关依赖

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇