tlias--自定义starter

一、先搞懂:自定义 Starter 是什么?

Starter = 一套可复用的自动配置工具包

  • 别人引入你的 Starter
  • 不用写任何配置
  • 直接 @Autowired 就能用你的功能
  • 这就是自定义 Starter

你平时用的:

spring-boot-starter-webspring-boot-starter-redis

全是这种东西!

二、自定义 Starter 步骤(一共 6 步,背会)

目标

做一个 itheima-utils-spring-boot-starter

别人引入后,直接用 TokenParser

第 1 步:创建一个 Maven 项目(工具项目)

项目名:itheima-utils-spring-boot-starter

引入依赖

xml

<dependencies>
    <!-- 自动配置核心依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.7.5</version>
    </dependency>
</dependencies>

第 2 步:写你的业务类(要被自动配置的类)

比如:TokenParser.java

java

运行

public class TokenParser {
    public void parse(){
        System.out.println("自定义Starter:TokenParser解析中...");
    }
}

注意:不要加 @Component! 因为加了别人也扫描不到。

第 3 步:写 自动配置类(最关键)

创建 TokenAutoConfiguration.java

java

运行

@Configuration // 表示这是一个配置类
public class TokenAutoConfiguration {

    // 把 TokenParser 交给 Spring 管理
    @Bean
    public TokenParser tokenParser(){
        return new TokenParser();
    }
}

作用:在这里创建 Bean,别人不用加任何注解!

第 4 步:创建 SpringBoot 自动配置文件(固定路径!)

必须创建 固定目录 + 固定文件名

plaintext

resources/META-INF/spring/
org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件内容:写上你的自动配置类全类名

plaintext

com.itheima.config.TokenAutoConfiguration

第 5 步:打包(maven install)

把你的 Starter 打包到本地仓库

别人就能通过 Maven 引入使用!

第 6 步:别人使用你的 Starter

1. 引入 Maven 依赖

xml

<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>itheima-utils-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

2. 直接注入使用!!!

java

运行

@Service
public class UserService {

    @Autowired
    private TokenParser tokenParser; // 直接用!

    public void test(){
        tokenParser.parse(); // 成功运行
    }
}

3. 测试成功!

不用配置,不用扫描包,直接用!

三、为什么这样就能用?(原理一句话)

SpringBoot 启动时:

  1. 自动读取所有 jar 包中的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  2. 加载里面的配置类
  3. 执行 @Bean,创建对象
  4. 放入 IOC 容器
  5. 你直接 @Autowired 注入使用

这就是 SpringBoot 自动配置的终极原理!

全部评论

相关推荐

05-07 15:08
已编辑
长沙理工大学 Java
2年多经验,面Java,简历筛选到约面试极快,下午5点推进简历,6点通知晚上7点面试,线上面试30分钟拉满,给了反问环节。感受:比常见的初级面试难出一个档次,问题很多很密,一个答不上来或者漏了,立马抛出下一个问题。面试压力挺大的。面试官技术栈深,喜欢追问细节,就是不确定是我撑过了30分钟还是他凑时长。真题复盘:项目类1、你做过难度最大,最有成就感的事情是什么(答了我简历写上千万级数据迁移)2、&nbsp;为什么MySQL迁MongoDB?答错(MongoDB不适合说关联查询慢)3、三读一写怎么定的?压测数据:单读3600ms/单写1300ms,测了2读1写还慢,最后定3读1写4、迁移过程怎么确保不重复的?(答了游标分页规避边界遗漏,失败精准裁剪重试、断点重试、凌晨迁移)5、如果要做增量迁移,怎么处理?(只答了双写,没记住具体的做法)6、数据迁移的校验机制是什么样的,怎么验证数据没有丢失重复?(答的最大业务id和数据条数比对,因为我的断点续传机制可以保证没丢没重,当时也没出问题)7、优惠券小程序的业务流程是什么?(按照实际流程答了)8、优惠券怎么防止超领?是否有上线?(答的因为并发不大,直接数据库SQL原子更新)9、为什么要使用随机字符串做防重复?只用时间戳为什么不可以?答错(答的防重作用,时间戳作用。正确应该还说两个人同时登录可能时间戳完全一样)10、先验后调方案的落地是什么样的?(答得整个验签流程)11、这个验签是在拦截器做的吗?(应该是想问我拦截器那怎么写,但我当时做的时候是接口层弄得&nbsp;)Java基础1、基本数据类型?漏了byte2、那为什么还需要包装类型?没答好(只说了泛型必须对象,成员变量基本类型,方法参数包装类型)3、包装类和基本数据类型使用场景大概是哪些?没答好(还是和第二问说的一样的)4、&nbsp;从底层说说double金额隐患?(说了精度丢失,没展开IEEE&nbsp;754)6、Java中String为什么不可变(漏了类内部不提供修改方法)7、多线程实现方式。(连续几个没答对,太紧张,背了两种就卡壳被打断了)8、讲一下对死锁的理解。(说了死锁四大条件和一种解决方式)9、多线程中start和run方法的区别(说的run方法存放线程具体逻辑,start方法触发线程就绪状态,没背八股,自己推测的)10、ArrayList和LinkedList的底层在增加数据有什么不同?(前者需要扩容,中间慢,尾部快,后者中间慢头尾快)11、jdk8的新特性你了解哪些?没背八股(说的接口default和static、还有hashmap的变化,偏了但是面试官耐心听我说完了)12、自定义异常类是怎么做的?(写过也完全忘了)13、SpringBoot默认集成的Web容器?(Tomcat)14、怎么修改集成的容器?(不会)15、Redis数据库一致性的保障措施?(先更后删、延迟双删、binlog日志监听)总结:项目亮点(迁移数据+压测调优)顶住了,但Java基础和安全设计被扒了一层皮。30分钟撑下来了,但知道自己短板在哪。接下来对着错题一个一个啃。建议:java基础要背一些关于底层的东西,项目问的也不少,深挖5个问题,需要顶住。
查看13道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务