最新手把手教你手写一个最简单的 Spring Boot Starter(1),大专生三面蚂蚁金服

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1.2.73

org.springframework.boot

spring-boot-autoconfigure

2.3.8.RELEASE

业务处理类,实现 Java 对象转换为带有指定前后缀的 JSON 字符串。

package com.nobody.myjson.service;

import com.alibaba.fastjson.JSON;

/**

  • @Description 业务处理类

  • @Author Mr.nobody

  • @Date 2021/2/27

  • @Version 1.0

*/

public class MyJsonService {

// 前缀

private String prefixName;

// 后缀

private String suffixName;

/**

  • 将Java对象转为带有指定前后缀的JSON字符串

  • @param o 需要转换的Java对象

  • @return 转换后的字符串

*/

public String objectToMyJson(Object o) {

return prefixName + JSON.toJSONString(o) + suffixName;

}

public String getPrefixName() {

return prefixName;

}

public void setPrefixName(String prefixName) {

this.prefixName = prefixName;

}

public String getSuffixName() {

return suffixName;

}

public void setSuffixName(String suffixName) {

this.suffixName = suffixName;

}

}

配置类,定义需要的配置信息和默认配置项,并指明关联配置文件的配置项前缀。它可以把相同前缀的配置信息通过配置项名称映射成实体类的属性中。

package com.nobody.myjson.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**

  • @Description 配置类(类名一般为模块名+Properties) nobody.json为Starter使用者通过yml配置文件动态修改属性值的变量名前缀

  • @Author Mr.nobody

  • @Date 2021/2/27

  • @Version 1.0

*/

@ConfigurationProperties(prefix = “nobody.json”)

public class MyJsonProperties {

// Starter使用者没在配置文件中配置prefixName属性的值时的默认值

public static final String DEFAULT_PREFIX_NAME = “@”;

// Starter使用者没在配置文件中配置suffixName属性的值时的默认值

public static final String DEFAULT_SUFFIX_NAME = “@”;

private String prefixName = DEFAULT_PREFIX_NAME;

private String suffixName = DEFAULT_SUFFIX_NAME;

public String getPrefixName() {

return prefixName;

}

public void setPrefixName(String prefixName) {

this.prefixName = prefixName;

}

public String getSuffixName() {

return suffixName;

}

public void setSuffixName(String suffixName) {

this.suffixName = suffixName;

}

}

自动装配类,使用 @Configuration 和 @Bean 来进行自动装配,注入 Spring 容器中。

package com.nobody.myjson.config;

import com.nobody.myjson.service.MyJsonService;

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;

/**

  • @Description 自动装配类

  • @Author Mr.nobody

  • @Date 2021/2/27

  • @Version 1.0

*/

@Configuration // 标识此类是配置类

@ConditionalOnClass(MyJsonService.class) // 表示只有指定的class在classpath上时才能被注册

@EnableConfigurationProperties(MyJsonProperties.class) // 激活@ConfigurationProperties

public class MyJsonConfiguration {

private MyJsonProperties myJsonProperties;

// 自动注入配置类

public MyJsonConfiguration(MyJsonProperties myJsonProperties) {

this.myJsonProperties = myJsonProperties;

}

// 创建MyJsonService对象,注入到Spring容器中

@Bean

@ConditionalOnMissingBean(MyJsonService.class) // 当容器没有此bean时,才注册

public MyJsonService myJsonService() {

MyJsonService myJsonService = new MyJsonService();

myJsonService.setPrefixName(myJsonProperties.getPrefixName());

myJsonService.setSuffixName(myJsonProperties.getSuffixName());

return myJsonService;

}

}

src/main/resources/META-INF目录下新建 spring.factories 文件,输入以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

com.nobody.myjson.config.MyJsonConfiguration

SpringBoot 项目启动时,类加载器会从 META-INF / spring.factories 加载给定类型的工厂实现的完全限定类名。也就是说类加载器得到工程中所有 jar 包中的 META-INF/spring.factories 文件资源,从而得到了一些包括自动配置相关的类的集合,然后将它们实例化,放入 Spring 容器中。

最终项目结构如下:

在这里插入图片描述

在开发工具 IDEA 通过 Maven 的 install 命令进行构建打包。或者在项目的目录下,打开命令行窗口,使用mvn install命令进行构建打包。打包后,会在工程的 target 目录下生成一个 jar 包,并且在 maven 本地仓库也会生成相应的 jar 包。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用自定义的 Starter


经过上面几个步骤,我们自定义的 Starter 就开发好了,以下是在其他工程进行引入使用。在需要引用此 Starter 的工程的 pom.xml 文件中引入此依赖。

com.nobody

myjson-spring-boot-starter

0.0.1-SNAPSHOT

刷新依赖,就能在项目的依赖库中看到此依赖了。

在这里插入图片描述

展开,还能查看此 Starter 可以配置的属性项有哪些,如下:

在这里插入图片描述

然后在需要用到的类中进行注入使用即可。

package com.nobody.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.nobody.domain.Person;

import com.nobody.service.MyJsonService;

@RestController

@RequestMapping(“demo”)

public class DemoController {

// 注入我们Starter中的服务类

@Autowired

private MyJsonService myJsonService;

@GetMapping()

更多:Java进阶核心知识集

包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等

image

高效学习视频

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

更多:Java进阶核心知识集

包含:JVM,JAVA集合,网络,JAVA多线程并发,JAVA基础,Spring原理,微服务,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存等等

[外链图片转存中…(img-VTFzXcXM-1715673082217)]

高效学习视频

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值