当前位置: 首页 > news >正文

反射在spring boot自动配置的应用

目录

一,背景

二,知识回顾

2.1 理解使用反射技术,读取配置文件创建目标对象(成员变量,方法,构造方法等)

三,springboot自动配置

3.1 反射在自动配置中的工作流程

3.2 浏览源码,逐步浏览spring boot自动配置

 四, 理解 starter 

4.1 自定义starter 


一,背景


一直以来,我们在完成spring boot项目中,一直遵循 固定的模式:

1,向pom文件引入依赖(starter)

2 ,使用依赖 的注解

3 ,观察引入的注解,是否报错,如果没有报错,编译运行观察结果

4 如果报错结合 自己所学知识+Ai辅助

至于这个注解,是怎么生效的,何时起作用,我们并没有关注,但实际上spring boot已经帮我们做好了。


今天,我就要和大家一起,深挖在spring boot 中,我们使用的注解 是怎么起作用的?----------------spring boot自动配置


二,知识回顾

在学习spring boot自动配置 之前,我们先要复习以下:通过配置文件动态创建对象

2.1 理解使用反射技术,读取配置文件创建目标对象(成员变量,方法,构造方法等)

配置文件+反射技术 应用场景:

实际开发中,当我们项目部署到服务器,一般情况下,不允许重新部署,但我们想要开发新的功能,可以使用配置文件+反射相结合完成新功能的添加与修改。


案例

背景:原本创建 🐺,🐏 对象实现动物接口,并在测试类中运行方法。但在运行后,才发现:还没有创建 狼对象,于是使用反射+配置文件读取的方式,实现对狼的创建

util工具类 :读取 配置文件内容

package com.it.heima;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class util {public static String readProperties() {Properties properties = new Properties();String path = null;try(// 获取配置文件流InputStream resourceAsStream = test.class.getClassLoader().getResourceAsStream("data.properties")){properties.load(resourceAsStream);path = properties.getProperty("wolf");
//            System.out.println(path);} catch (IOException e) {e.printStackTrace();}return path;}
}

data.properties配置文件

test测试类

package com.it.heima;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class test {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Sheep sheep = new Sheep();sheep.run();sheep.eat();sheep.sleep();System.out.println("--------------------------");String path = util.readProperties();Wolf wolf = (Wolf)Class.forName(path).newInstance();wolf.run();wolf.eat();}
}
测试结果:
绵羊跑跑~~~~~~~~
绵羊吃吃~~~~~~~~
绵羊睡觉~~~~~~~~
--------------------------
com.it.heima.Wolf
狼跑~~~~~~~~~~~
狼吃羊~~~~~~~

"上面这个案例展示了反射的基本用法 —— 通过配置文件动态创建对象。而 Spring Boot 的自动配置,本质上就是把这个过程标准化、规模化:框架通过反射读取类路径、注解和配置文件,自动为我们创建和配置各种 Bean,这就是我们接下来要深入探讨的内容。"


三,springboot自动配置

3.1 反射在自动配置中的工作流程

1,类路径扫描:Spring Boot 会扫描类路径下的所有类,找出带有特定注解的类。@compoentscan注解
2,条件评估:通过反射检查类、方法或者字段的存在情况,以此确定是否应用某项配置。@Condition衍生注解+@Bean
3,实例化 Bean:利用反射调用构造函数或者工厂方法来创建 Bean 实例。
4,依赖注入:借助反射设置 Bean 的字段值或者调用 setter 方法。


案例

@Configuration
@ConditionalOnClass(RestTemplate.class) // 反射检查类是否存在
@EnableConfigurationProperties(MyAutoConfigProperties.class)
public class MyAutoConfiguration {
private final MyAutoConfigProperties properties;public MyAutoConfiguration(MyAutoConfigProperties properties) {this.properties = properties;
}@Bean
@ConditionalOnMissingBean // 反射检查Bean是否已存在
public RestTemplate restTemplate() {RestTemplate template = new RestTemplate();// 基于配置属性进行定制if (properties.isLoggingEnabled()) {template.getInterceptors().add(new LoggingInterceptor());}return template;
}

3.2 浏览源码,逐步浏览spring boot自动配置

这里,我将拿web起步依赖举例:

以下图片是我截取 来自博客链接 :学习springboot 的自动配置原理_spring-boot-autoconfigure-CSDN博客

核心看到 selectImport方法

11进入DispatcherServletAutoConfiguration 自动配置类

关于条件注解的详情可以浏览 :学习springboot-条件化配置@Conditional(条件注解)_springboot条件化配置-CSDN博客


 四, 理解 starter 

starter:一组功能模块的坐标,当我们引用坐标时,可以使用它提供的功能

starter本质:接口+接口实现类/接口实现类 


4.1 自定义starter 

可以结合:springboot学习(自定义starter)_springboot3.4.3 引入 定义 springboot starter-CSDN博客

相关文章:

  • HTML应用指南:利用POST请求获取全国申通快递服务网点位置信息
  • 基于Java的校园失物招领系统【附源码】
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月20日第83弹
  • Python----循环神经网络(WordEmbedding词嵌入)
  • Java中的ImageIo支持webp解析
  • java中的Filter使用详解
  • Leetcode 01 java
  • 预先学习:构建智能系统的 “未雨绸缪” 之道
  • 杰发科技AC7840——如何把结构体数据写到Dflash中
  • 【NLP 76、Faiss 向量数据库】
  • 珈和科技贺李德仁院士荣膺国际数字地球学会会士:以时空智能赋能可持续发展目标 绘就数字地球未来蓝图
  • 【神经网络与深度学习】扩散模型之通俗易懂的解释
  • HarmonyOS5云服务技术分享--ArkTS调用函数
  • 4-5月份,思科,华为,微软,个别考试战报分享
  • 鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
  • 一文掌握vue3基础,适合自学入门案例丰富
  • A1-A2 英语学习系列 第四集 中国版
  • MYSQL备份恢复知识:第四章:备份锁
  • 关于汇编语言与接口技术——单片机串行口的学习心得
  • 【综述】视频目标分割VOS
  • 新华社原香港分社副社长、深圳市委原副书记秦文俊逝世
  • 人民日报任平:从“地瓜经济”理论到民营经济促进法,读懂中国经济的成长壮大之道
  • 确诊前列腺癌后,拜登首次发声
  • 长三角议事厅·周报|新能源汽车产业需寻求“第二增长曲线”
  • 专访|金七猫奖得主:以非遗为舟,在现实题材中疗愈与成长
  • 人民日报大家谈:为基层减负,治在根子上减到点子上