SpringBoot原理-手写starter

概念

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

简单的说

  1. 构建简单
  2. 减少配置(减少了spring中的web.xml application.xml spring-mvc.xml)

特点

Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
Provide opinionated ‘starter’ dependencies to simplify your build configuration
Automatically configure Spring and 3rd party libraries whenever possible
Provide production-ready features such as metrics, health checks, and externalized configuration
Absolutely no code generation and no requirement for XML configuration

  1. 内嵌Tomcat,Jetty或者Undertow,所以不需要打成war包部署至Tomcat
  2. 提供starter依赖,这一节的重点 eg:spring-boot-starter-web
  3. 尽可能自动配置第三方依赖
  4. 提供健康检查,可扩展配置
  5. 完全不需要配置代码或xml文件

手写starter

  1. 创建结构
    在这里插入图片描述
  2. 添加依赖
<!--开发自定义starter必须的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
  1. 创建SayHello接口以及实现类
public interface ISayHello {
    //方便测试只有一个方法
    void sayHello();
}
import org.springframework.beans.factory.annotation.Autowired;

public class SayHelloImpl implements ISayHello {

    @Autowired
    private SayHelloProperties sayHelloProperties;

    @Override
    public void sayHello() {
        //从application.xml获取spring.gao.name的值
        String name = sayHelloProperties.getName();
        System.out.println("你好:" + name);
    }
}
  1. 创建读取application.yml类,模拟SpringBoot从application.yml文件读取配置
import org.springframework.boot.context.properties.ConfigurationProperties;

//自定义注解前缀为 spring.gao
@ConfigurationProperties(prefix = "spring.gao")
public class SayHelloProperties {

    private String name = "xiaoming";

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建自动配置类SayHelloAutoconfiguration,实现将SayHello注入SpringIOC
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//保证springboot启时注入IOC容器
@Configuration
@ConditionalOnClass(ISayHello.class)
@EnableConfigurationProperties(SayHelloProperties.class)
public class SayHelloAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public ISayHello getSayHello(){
        return new SayHelloImpl();
    }
}
  1. 创建META-INF目录下并创建spring.factories引入指定自动配置类
# 将加载指定的自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com/gao/cn/SayHelloAutoConfiguration
  1. 将依赖打包,在另一个项目导入这个依赖
mvn clean install 
  1. 测试结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的示例,展示了如何手写一个Spring Boot Starter: 首先,创建一个 Maven 项目,并添加以下依赖项: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.4</version> </dependency> </dependencies> ``` 接下来,创建一个自定义的自动配置类,用于配置你的 Starter: ```java @Configuration @EnableConfigurationProperties(MyStarterProperties.class) public class MyStarterAutoConfiguration { private final MyStarterProperties properties; public MyStarterAutoConfiguration(MyStarterProperties properties) { this.properties = properties; } // 在此处定义你的自动配置逻辑 @Bean public MyStarterService myStarterService() { return new MyStarterService(properties); } } ``` 然后,创建一个属性类,用于将外部配置绑定到属性上: ```java @ConfigurationProperties("my.starter") public class MyStarterProperties { private String message; // 提供 getter 和 setter } ``` 最后,创建一个自定义的服务类,该服务类将在你的 Starter 中使用: ```java public class MyStarterService { private final MyStarterProperties properties; public MyStarterService(MyStarterProperties properties) { this.properties = properties; } public void showMessage() { System.out.println(properties.getMessage()); } } ``` 现在,你的 Spring Boot Starter 已经准备就绪了!你可以将其打包并使用在其他 Spring Boot 项目中。在其他项目的 `pom.xml` 文件中,添加你的 Starter 依赖: ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-starter</artifactId> <version>1.0.0</version> </dependency> </dependencies> ``` 然后,在你的应用程序中使用 `MyStarterService`: ```java @SpringBootApplication public class MyApplication implements CommandLineRunner { private final MyStarterService myStarterService; public MyApplication(MyStarterService myStarterService) { this.myStarterService = myStarterService; } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } @Override public void run(String... args) throws Exception { myStarterService.showMessage(); } } ``` 这样,你就成功地创建了一个简单的 Spring Boot Starter!当其他项目引入你的 Starter 并运行时,将会输出预定义的消息。 当然,这只是一个简单的示例,真实的 Starter 可能包含更多的配置和功能。你可以根据自己的需求进行扩展和定制。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值