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

反射在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博客

http://www.xdnf.cn/news/7549.html

相关文章:

  • Mysql 中的日期时间函数汇总
  • 2025ICPC南昌邀请赛题解
  • 基于规则引擎与机器学习的智能Web应用防火墙设计与实现
  • 【数据库课程设计】网上投票管理系统
  • 阿博图书馆管理系统 Java+Spring Boot+MySQL 实战项目分享
  • leetcode hot100:一、解题思路大全:技巧(只出现一次的数字、多数元素、颜色分类、下一个排列、寻找重复数)、矩阵(矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵Ⅱ)
  • ArkUI Tab组件开发深度解析与应用指南
  • setInterval和setTimeout的区别是什么
  • 【java第18集】java引用数据类型详解
  • Q-learning 算法学习
  • JUC入门(三)
  • FAL API分析
  • 工会考试怎么备考
  • 如何确保低空经济中的数据安全?
  • 斜齿轮直列齿轮箱市场分析报告:驱动因素、挑战及前景预测
  • WAF深度解析:精准适配六大核心业务场景
  • Python实现的在线词典学习工具
  • JQuery 禁止页面滚动(防止页面抖动)
  • 测试开发面试题:Python高级特性通俗讲解与实战解析
  • 数据可视化热图工具:Python实现CSV/XLS导入与EXE打包
  • 软件设计师完整性约束考点分析——求三连
  • antd树结构
  • Java常见API文档(下)
  • matlab绘制光学传递函数mtf曲线
  • Pattern解说
  • CPU与vivado编译速度关系
  • C++_AVL树
  • vue2.0 的计算属性
  • 人员管理2302版本
  • 特征筛选方法总结