SpringBoot四大核心之starter——自定义starter

四大核心

1、starter:jar包的引入,解决jar版本冲突问题
2、自动装配:简单配置甚至零配置即可运行项目
3、actuator:springboot程序监控器
4、CLI:命令行

starter

starter的命名有一种习惯,官方的starter一般都是spring-boot-starter-xxx,而我们自定义的starter一般都是xxx-spring-boot-starter。

首先我们需要明白一件事,就是我们自定义的bean是可以自动装配过来的,而我们第三方自定义的starter是如何被componentScan扫描到的呢,其实有一个约定,就是在resources下创建一个META-INF目录,在该目录下创建一个spring.factories文件,然后在该文件下说明哪些类下是你的bean。
org.springframework.boot.autoconfigure.EnableAutoConfiguration

创建一个普通的springboot项目

我这里命名为hzy-spring-boot-starter,当你创建好之后,可以把启动类删了,因为我做依赖一般都是被其他项目引入的,所以留着也没用,然后需要引入两个依赖

<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>

引入之后,我们可以定义一个service,里面可以写我们的业务代码。

public class HzyService {
    public String getHelloWorld() {
        return "hello world";
    }
}

然后就是定义一个配置类,这里命名为AutoConfig,用来将我们的service注入到IoC容器中

@Configuration
public class AutoConfig {
    @Bean
    public HzyService hzyService() {
        return new HzyService();
    }
}

然后就是最重要的一步了,让我们的配置类能被扫描到,在Spring中,约定大于配置,约定了我们在resources下创建一个META-INF的目录,里面写一个spring.factories文件,配置上路径即可。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hzy.AutoConfig

最后的最后就是将这个项目打包到我们本地的maven仓库了,执行下面的命令即可。

mvn clean install -Dmaven.test.skip=true

最后,像引入其他依赖一样,引入该依赖就可以了,里面那个HzyService,可以直接通过自动装配创建对象。

@Autowired
private HzyService hzyService;

至此,自定starter就结束了,是不是很简单,如果世界这么简单就好了。。。

配置文件

我们在写一些官方的配置的时候,可能会发现,当我们写了一个前缀,后面会有一些提示,重要的是,我们的配置能够生效,这是怎么做到的呢?

其实是通过一个@ConfigurationProperties注解实现的,通过配置前缀,它可以进行扫描到你的配置。

@ConfigurationProperties(prefix = "hzy")
public class HzyProperties {
    private String name;

    public String getName() {
        return name;
    }

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

这样一个简单的配置,我们就可以在引入该jar的项目中进行配置了,如果不配置的话,name属性为null。

此时我们修改我们的Service类,把该配置引进来。

public class HzyService {
    @Autowired
    private HzyProperties hzyProperties;

    public String getHelloWorld() {
        return "hello world: " + hzyProperties.getName();
    }
}

另外,我们还需要修改我们的自动装配类,通过@Import注解,将该类提前注入到IoC容器。

@Configuration
@Import(HzyProperties.class)
public class AutoConfig {
    @Bean
    public HzyService hzyService() {
        return new HzyService();
    }
}

在这里插入图片描述

当我们引入了该依赖之后,会有提示了,配置一下name,再次运行

在这里插入图片描述

可以看到,配置已生效,好了,今天的分享就到这里了。

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺志营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值