9、手写一个starter

一、starte详解:

1、starter场景启动器:

SpringBoot-starter是一个集成接合器,主要完成两件事:

(1)、引入模块所需的相关jar包

(2)、自动配置各自模块所需的属性

注:

spring-boot-starter-*:官方提供

*-spring-boot-starter:第三方提供

2、starter实现原理:

(1)、首先,SpringBoot在启动时会先去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包

(2)、然后,根据 spring.factories 配置加载自动配置类。

(3)、最后,根据 @Conditional 注解的条件,进行自动配置,并将Bean注入Spring Context上下文当中。

二、Springboot自动配置原理:

详细参考

Springboot启动的时候会通过@EnableAutoConfiguration注解找到配置文件中的所有自动配置类(XxxxAutoConfiguration类),并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。

三、手写一个starter:

手写一个starter。功能很简单,调用starter内对象的一个方法输出”xxx,hello! xxx”

1、hello-spring-boot-starter工程:

(1)、改POM:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

        org.springframework.boot
        spring-boot-starter-parent
        2.7.1

    com.iven
    hello-spring-boot-starter
    0.0.1-SNAPSHOT
    hello-spring-boot-starter
    Demo project for Spring Boot

        1.8

            org.springframework.boot
            spring-boot-starter

            org.springframework.boot
            spring-boot-starter-web

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

            org.springframework.boot
            spring-boot-autoconfigure

            org.projectlombok
            lombok
            1.18.20

                org.apache.maven.plugins
                maven-compiler-plugin
                3.10.1

                    8
                    8

(2)、编写业务类Service:

@Data
@AllArgsConstructor  //全参构造
@NoArgsConstructor  //无参构造
public class HelloService {
    private  String name;
    private String detail;

    public String hello() {
        return getName()+",hello! " + getDetail();
    }

}

(3)、编写Configuration配置类(主):

@Configuration    //表明这是一个springBoot的配置类
public class HelloConfig {
    @Value("${com.hello:Iven}")
    private  String name;

    @Value("${com.hello:冲冲冲}")
    private String detail;

    @Bean    //将对象放入IOC容器中,对象名就是方法名
    public HelloService helloService(){
        return new HelloService(name,detail);
    }

}

(4)、编写spring.factories文件:

为了让springboot容器扫描到配置类,建一个resource目录,一个META-INF文件夹和spring.factories文件

9、手写一个starter
#等号后面是配置类的全路径(包+配置类名)
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.iven.hellospringbootstarter.config.HelloConfig

(5)、install打包到本地仓库;

2、test-starter-demo工程:

(1)、添加依赖:

com.iven
    hello-spring-boot-starter
    0.0.1-SNAPSHOT

(2)、使用:

@RestController
@RequestMapping("/v1")
public class control {
    @Autowired
    private HelloService helloService;

    @RequestMapping("")
    public String demo(){
        helloService.setName("Pitt");
        return helloService.hello();
    }
}

搜索

复制

Original: https://www.cnblogs.com/Iven-L/p/16592159.html
Author: 爱文(Iven)
Title: 9、手写一个starter

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575691/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 了解HTML/CSS/JS/JQuery/ajax等前端知识

    什么是HTML 超文本标记语言 浏览器通过识别相应的标签来加载页面 通过HTTP协议传输,不是编程语言 HTML常用标签 title script style link meta …

    数据库 2023年6月16日
    0141
  • 事物的隔离性和MVCC

    事物的隔离性 mysql的服务端是支持多个客户端同时与之连接的,每个客户端可能还并发了好几个连接,所以mysql是需要同时处理很多事情的,每一件独立的事情就叫做事务。我们知道事务有…

    数据库 2023年6月14日
    082
  • Element UI的第一个程序(标签使用)

    1:Element UI 官方文档:https://element.faas.ele.me/ 2:Element UI是什么? 网站快速成型工具 *Element,一套为开发者、设…

    数据库 2023年6月6日
    0109
  • 相同执行计划,为何有执行快慢的差别

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 前言 今天遇到一个很神奇的现象,…

    数据库 2023年5月24日
    085
  • 实验:非GTID 级联复制架构变为一主多从

    个个原创文章 欢迎讨论https://www.cnblogs.com/konggg/欢迎转载收藏,转载请注明来源,谢谢支持! Original: https://www.cnblo…

    数据库 2023年6月16日
    0113
  • 利用VBS调戏别人,否则电脑关机

    利用VB脚本强制用户输入固定语句,否则系统将倒计时关机 将以下代码复制到文本文档中,保存后修改文件后缀名称为.vbs,打开该文件就可以看到效果了; on error resume …

    数据库 2023年6月11日
    097
  • 我应该是最后一个知道 WSL 的吧!

    前言 前段时间,我买了块固态硬盘给我的笔记本电脑装上(因为它太慢了,影响我游戏学习)。同时也重装了系统,以前一直在用 Win8.1,在上面构建了我的开发环境:在 Win8.1 上安…

    数据库 2023年6月6日
    0100
  • [SuperSocket2.0]SuperSocket 2.0从入门到懵逼

    SuperSocket 2.0从入门到懵逼 1 使用SuperSocket 2.0在AspNetCore项目中搭建一个Socket服务器 1.1 引入SuperSocket 2.0…

    数据库 2023年6月9日
    0145
  • LeetCode 26. 删除有序数组中的重复项

    给你一个 升序排列 的数组nums,请你 原地 删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。 由于在某些语言中不能改变数组的长度,…

    数据库 2023年6月11日
    087
  • 【JDBC】编程(2)— 写一个JDBC工具类;用 JDBC工具类 实现模糊查询

    JDBC工具类 功能: 简化JDBC部分代码书写 import java.sql.*; public class DBUtil { /** * 工&#…

    数据库 2023年5月24日
    0107
  • 数据结构与算法-农夫过河问题

    农夫过河问题——最短路径算法 问题描述:农夫用小木筏将狼、羊、菜从起始岸运到目标岸,小木筏每次只能带一种物品,也可以什么都不带,因为食物链的关系,人不在的时候,狼会吃羊,羊会吃菜,…

    数据库 2023年6月14日
    0114
  • writeset参数配置探索——究竟在哪个角色上配置参数?

    关于writeset,一直以来我都是所有节点同时配置下面参数: binlog_transaction_dependency_tracking=WRITESET transactio…

    数据库 2023年6月16日
    086
  • Redis——数据操作(3)

    2022-09-22 (4)set操作 ①添加操作(sadd): 例: ②查看操作(smembers):例: ③移除操作(srem):例: (5)zset(有序集合而且里面的元素是…

    数据库 2023年6月14日
    0133
  • 《SpringBoot官网文档:2.1.5》

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    089
  • MySql 删除数据表

    定义: 删除数据表就是将数据库中已经存在的表从数据库中删除。注意,在删除表的同时,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做一个备份,以免造成无…

    数据库 2023年6月14日
    084
  • Linux安装 MySQL

    一、下载yum仓库 1、说明:mysql官方提供所有版本的仓库,要使用yum方式安装的话需要提前下载该仓库列表 2、官方下载链接:https://dev.mysql.com/dow…

    数据库 2023年6月9日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球