首页 > 其他分享 >springboot自定义Starter(超简捷)

springboot自定义Starter(超简捷)

时间:2023-11-04 10:33:05浏览次数:28  
标签:springboot 自定义 spring private custom starter CustomProperties Starter String

啥也不说,新建一个新的Maven项目引入Spring必要依赖
autoconfigure 这个依赖是 Spring Boot 框架的自动配置依赖,它包含了大量的自动配置类,用于根据应用程序的配置和环境,在应用程序启动时自动配置各种组件和属性。通过这个依赖,可以实现一些常见的配置,如数据库连接、缓存、消息队列等的自动配置。
processor 这个依赖是 Spring Boot 框架的配置处理依赖,它是一个编译时的依赖,用于在开发阶段帮助编辑器或 IDE 进行属性注入的代码补全和验证。通过这个依赖,可以使得使用 @Value 注解注入属性时,编辑器能够智能感知并提供代码补全。由于这个依赖只是在开发阶段使用,因此在打包时会被标记为 optional 属性,不会被打包进最终的可执行 JAR 或 WAR 中。

   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>




自定义一个服务:

public class CustomService {

    @Autowired
    private CustomProperties customProperties;

    public void customService() {
        System.out.println("customService");
        System.out.println(customProperties.toString());
    }
}




通过@Bean注入到ioc容器内

@Configuration
@Import({CustomProperties.class})
public class AutoConfig {
    @Bean
    public CustomService customService(){
        return new CustomService();
    }
}




然后在res目录下创建 yaml文件

project:
  version: 1.0.0

spring:
  application:
    name: custom-application

custom:
  application:
    name: ${spring.application.name}
    version: ${project.version}
    description: "custom starter 0.0.1.RELEASE"
    packageName: "com.example"
    packageVersion: "1.0.0"
    packageDescription: "custom starter 2.0.0.RELEASE"
    packageUrl: "https://custom starter/projects/spring-boot"
    packageLicense: "Apache License, Version 2.0"




好了开始通过自定义类读取yaml文件, AutoConfig配置类使用了 @Import({CustomProperties.class}) 是将 CustomProperties 类导入到应用程序上下文中,并将其视为一个 Bean 加载进来
例如,如果 CustomProperties 类中定义了名为 "app.name" 的属性,并且我们在应用程序中使用 @Value("#{customProperties.app.name}") 注解来注入该属性的值,那么 Spring Boot 会将 CustomProperties 类导入到应用程序上下文中,并将 "app.name" 属性的值注入到相应的字段或方法中。 总之,@Import({CustomProperties.class}) 注解是 Spring Boot 中用于加载 CustomProperties 类并将其引入应用程序上下文的便捷方式。


@Configuration
@ConfigurationProperties(prefix = "custom.application")
public class CustomProperties {
    private String name;
    private String version;
    private String applicationName;
    private String packageName;
    private String description;
    private String packageVersion;
    private String packageDescription;
    private String packageUrl;
    private String packageLicense;
}
......
setter
getter
toString




然后在resources 目录下创建META-INF目录,接着创建spring.factories 文件
META-INF 是一个标准的 Java 路径,用于指示一个 JAR 文件中的元信息文件夹。在 JAR 文件中,可以使用 META-INF 文件夹来存储一些关于该 JAR 文件的元数据信息,例如 MANIFEST.MF 文件、spring.factories 文件等。 spring.factories 是一个文本文件,用于存储 Spring 框架中的服务提供者和消费者的信息。它以 org.springframework.core.env.ConfigurableEnvironment 为键,以服务提供者的类名作为值,多个服务提供者的类名可以使用逗号分隔。在 Spring Boot 中,spring.factories 文件常用于自动配置应用程序,通过在其中添加键值对,可以标识应用程序中的自动配置类,从而实现自动配置。 例如,下面的 spring.factories 文件中的内容表示应用程序中使用了 com.example.MyConfiguration 类作为自动配置类:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=top.jilijili.starter.config.AutoConfig

通过在 META-INF/spring.factories 文件中添加类似的键值对,可以告诉 Spring Boot 在启动应用程序时应该加载哪些自动配置类。




接着继续创建一个新的maven项目,引入自定义starter依赖
启动类

@SpringBootApplication
public class App {


    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        // 自定义依赖下的服务
        CustomService bean = context.getBean(CustomService.class);
        bean.customService(); // 输出:customService
CustomProperties{name='custom-application', version='2.1.12', applicationName='custom', packageName='com.example', description='custom starter 0.0.1.RELEASE', packageVersion='1.0.0', packageDescription='custom starter 2.0.0.RELEASE', packageUrl='https://custom starter/projects/spring-boot', packageLicense='Apache License, Version 2.0'}

    }
}
<br/><br/>

可以在yaml文件重新配置自定义starter下的yaml文件属性:



在自定义依赖下面,编译解释过后的target目录下能看到:spring-configuration-metadata.json 文件



好,到此结束

标签:springboot,自定义,spring,private,custom,starter,CustomProperties,Starter,String
From: https://www.cnblogs.com/MnysLjj/p/17808989.html

相关文章

  • SpringBoot中的扩展和解耦思想
    你可能会有这样的疑问:在SpringBoot中,为什么不直接使用一个Service写功能,而是Service接口+ServiceImpl实现类?当项目比较简单的时候,需求明确,变更不频繁或者几乎不怎么修改的时候,用第一种就好了当项目比较复杂,需求变更多的时候,用第二种比较好这种方式的好处有:解耦合便于扩展......
  • springboot的自动装配机制
    ·自动配置的Tomcat,SpringMvc等只需要导入场景,容器中就会自动配置好这个场景的核心组件容器中有什么组件,就具备什么样的功能·默认的包扫描规则@SpringBootApplication标注的类就是主程序类SpringBoot只会扫描主程序所在的包及其下......
  • 在线点餐系统(课设) springboot 免费源码
    项目源码获取方式见文章末尾处项目技术数据库:Mysql8.0数据表数:5张开发工具:idea前端技术:Springboot+MybatisPlus后端技术:BootStrap+Thymeleaf功能简介该项目是一个在线点餐系统,分为用户端和商家端。商家端:    登录/注册    首页    菜单管理    订单管理   ......
  • 创建自定义美颜滤镜:使用第三方美颜SDK的步骤指南
    美颜滤镜在现代移动应用和直播平台中变得越来越受欢迎。它们可以让用户在自拍照片、视频聊天或实时直播中看起来更加美丽和自信。如果您是一位应用开发者,想要增加美颜滤镜功能,但又不想从头开始构建整个系统,那么使用第三方美颜SDK可能是一个明智的选择。第1步:选择适合的第三方美颜SD......
  • springboot + maven + war
    参考文档:springboot配置https://blog.csdn.net/weixin_42594143/article/details/132651455maven项目打war包https://blog.csdn.net/yuanpeij/article/details/120563593https://blog.51cto.com/u_16099190/63531951、项目启动类在SpringBoot应用中,如果需要将应......
  • powershell自定义命令,类型linux的alias
    linux里经常取很多alias来方便敲命令。在win上也有类型功能,之前边百度边配过一次,然后今天要加一些,发现记不起来了。百度也不顺利。然后就找了一下之前的命令在哪里。C:\Windows\System32\WindowsPowerShell\v1.0下的profile.ps1。把自定义的函数写进去。就可以直接在powershell......
  • python 自定义序列化器
    @Serialization是一个自定义装饰器,通常用于序列化Python对象。使用@Serialization装饰器可以将一个类转换为可序列化的对象,这样就可以将其存储到文件或通过网络传输。下面是一个使用@Serialization装饰器的示例:importjsondefSerialization(cls):defserialize(......
  • SpringBoot自动装配(二)源码分析
    基于SpringBoot2.7.11step1.从EnableAutoConfiguration注解开始注解@EnableAutoConfiguration开启了自动配置然后SpringBoot在启动的时候通过类路径进行扫描查找所有META-INF/spring.factories文件加载其中所有的自动配置类step2.应用启动@SpringBootApplicationpub......
  • vscode 怎么在 ctrl+p ( 转到文件 ) / ctrl+shift+o ( 转到编辑器中的符号 ) 时通过自
    解决方法:使用PowerToy( microsoft/PowerToys:Windowssystemutilitiestomaximizeproductivity(github.com) )来进行按键映射。    ......
  • shell自定义变量
    自定义变量自己定义的变量自定义变量分类:自定义局部变量只能在一个脚本文件中使用的变量定义使用:不能以数字开头var_name=value等号两侧不能有空格bash中默认的类型为字符串类型,无法直接数值运算变量值有空格,必须使用双引号不能使用关键字自定义常亮自定......