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. 测试结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值