自定义SpringbootStarter

1.创建一个maven的项目,里面有两个模块

  • hehe-spring-boot-starter 对外暴露的模块,方便外部引用
  • hehe-spring-boot-autoconfigure 自动装载的类,starter的功能定义在这里面
  • springboot-hehe-starter 父项目
maven项目.png

2.父项目的pom文件如下:



    4.0.0
    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.6.RELEASE
         
    

    org.example
    springboot-hehe-starter
    pom
    1.0-SNAPSHOT
    
        hehe-spring-boot-starter
        hehe-spring-boot-autoconfigure
    
    
  
    
        
            org.springframework.boot
            spring-boot-starter
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-source-plugin
                
                    true
                
                
                    
                        compile
                        
                            jar
                        
                    
                
            
        
    


3.编写hehe-spring-boot-autoconfigure启动项目
3.1.创建pom文件



    
        springboot-hehe-starter
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    hehe-spring-boot-autoconfigure

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        

        
        
            cn.hutool
            hutool-all
            5.4.0
            true
        

    


3.2 编写properties类,支持用户配置properties属性,里面也可以设置一些默认属性

package com.starter.hehe;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("hehe")
public class IndexProperties {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3.3 编写bean,这里写了一个controller
···
package com.starter.hehe;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

IndexProperties indexProperties;

public IndexController(IndexProperties indexProperties) {
    this.indexProperties=indexProperties;
}

@RequestMapping("/index")
public String index(){
    return indexProperties.getName()+"欢迎您";
}

}
···
3.4 编写自动配置类

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 配置类
@ConditionalOnProperty(value = "hehe.name") //application.properties有这个配置才会使用这个自动配置类
@EnableConfigurationProperties(IndexProperties.class) // 让IndexProperties类注入配置属性并被spring管理,变成一个bean
@ConditionalOnClass(StrUtil.class) // 当项目中有这个类的时候会加载这个自动配置模块
public class IndexAutoConfiguration {

    @Autowired
    IndexProperties indexProperties;

    @Bean
    public IndexController indexController(){
        return new IndexController(indexProperties);
    }

}

3.5 编写spring.factories
在resource下面建立META-INF包,创建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.starter.hehe.IndexAutoConfitguration

4.编写hehe-spring-boot-starter pom文件



    
        springboot-hehe-starter
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    hehe-spring-boot-starter

    
        
            org.example
            hehe-spring-boot-autoconfigure
            1.0-SNAPSHOT
        
    

5.执行maven的install,打包到本地仓库
6.其他springboot项目引入刚写的starter项目,并引入hutool工具类,否则不会自动装载进来


            org.example
            hehe-spring-boot-starter
            1.0-SNAPSHOT
        

        
            cn.hutool
            hutool-all
            5.4.0
        

7.properties文件添加配置hehe.name=[hehe]
8.启动项目,访问http://localhost:8082/index

1637675149(1).png

你可能感兴趣的:(自定义SpringbootStarter)