SpringBoot 原理专题

优先级与打包

  1. 命令行参数
  2. 系统环境
  3. properties
  4. yml
  5. yaml

打包插件

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.example.DemoApplication</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>

打包后运行,带额外参数

java -Dserver.port=9000 -jar dd.jar

Bean 作用域

作用域说明
singleton容器内同 名称 的 bean 只有一个实例(单例)(默认)
prototype每次使用该 bean 时会创建新的实例(非单例/多例)
request每个请求范围内会创建新的实例(web环境中,了解)
session每个会话范围内会创建新的实例(web环境中,了解)
application每个应用范围内会创建新的实例(web环境中,了解)

配置 Scope 注解,选择单例

  • Lazy 表示延迟加载,默认是启动时加载,配置后表示延迟到第一次使用加载
  • SCOPE_SINGLETON 单例
  • SCOPE_PROTOTYPE 非单例

@Lazy @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) @RestController public class BasicController {}

注意:

  1. 单例是无状态的,多例是有状态的。
  2. 单例是节约资源,提升性能
  3. 单例bean:如果是无状态的bean,内部不保存任何状态信息,则是线程安全的。
  4. 单例bean:如果是有状态的bean,内部会保存状态信息,多个线程会同时操作该bean时,可能会出现数据不一致的问题,这样的bean则是线程不安全的。

起步依赖

依赖,具有传递性。

自动配置

SpringBoot的自动配置就是当spring项目启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

比如:引入了redis依赖,可以直接注入Redis使用。

实现方案一

加入另一个项目的依赖,引入依赖,并在主类上加上包扫描,扫描该依赖的包,不推荐,原因是操作麻烦+性能低

实现方案二

类不需要加任何注解,直接使用 Import 导入,或者使用Imort 导入一个配置类。

@Import(TokenService.class) @SpringBootApplication public class DemoApplication {

配置类代码

public class MyImportSelector implements ImportSelector { // 返回多个类的全限定命名 @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{"com.example.aop.RecordTimeAspect2"}; } }

实现方案三:加注解的方式,最实用

// 核心还是用方式二 @Import(MyImportSelector.class) @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface EnableHeaderConfig { }

条件判断 / 自动配置

有时候我们经常需要判断该类应不应该注入到IOC容器中。

  • 作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到Spring IOC容器中。

  • 位置:方法、类

  • @Conditional 本身是一个父注解,派生出大量的子注解:

  • @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。

  • @ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或 名称) ,才注册bean到IOC容器。

  • @ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。

@Bean // 判断环境中是否存在io.jsonwebtoken.Jwts,如果有就创建该Bean @ConditionalOnClass(name = "io.jsonwebtoken.Jwts") // 判断环境中是否存在该类,如果没有就创建该Bean @ConditionalOnMissingBean // 判断属性值是否为true,在配置文件中 @ConditionalOnProperty(name = "enable", havingValue = "true") public RecordTimeAspect2 recordTimeAspect2(){ return new RecordTimeAspect2(); }

自己定义自动配置类的核心是什么? 如何完成自动配置?

  1. 定义自动配置类
  2. 将自动配置类配置在 META-INF/spring/
  3. org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中

自定义Starter

需求:自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类 AliyunOSSOperator 的自动配置。

目标:引入起步依赖引入之后,要想使用阿里云OSS,注入 AliyunOSSOperator 直接使用即可。

步骤:

  1. 创建aliyun-oss-spring-boot-starter模块
  2. 创建aliyun-oss-spring-boot-autoconfigure模块,在starter中引入该模块
  3. 在aliyun-oss-spring-boot-autoconfigure模块中的定义自动配置功能,并定义自动配置文件 META-INF/spring/xxxx.imports

注意:选择一个版本,无需要选依赖

只需要依赖是 spring-boot-starter 就可以。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- 帮助yaml提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>

@Configuration @EnableConfigurationProperties(OSSProperties.class) // 引入配置类 public class OSSConfig { @Bean public OSS endpoint(OSSProperties ossProperties) { DefaultCredentialProvider defaultCredentialProvider = new DefaultCredentialProvider(ossProperties.getAccessKeyId(), ossProperties.getSecretAccessKey()); ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); return OSSClientBuilder.create() .endpoint("https://" + ossProperties.getEndpoint()) .credentialsProvider(defaultCredentialProvider) .clientConfiguration(clientBuilderConfiguration) .region(extractRegion(ossProperties.getEndpoint())) .build(); } /** * 获取 region */ private String extractRegion(String endpoint) { if (endpoint == null) return null; int start = endpoint.indexOf("oss-"); int end = endpoint.indexOf(".aliyuncs.com"); if (start == -1 || end == -1 || start + 4 >= end) throw new IllegalArgumentException("Invalid endpoint: " + endpoint); return endpoint.substring(start + 4, end); } }

@Data @ConfigurationProperties(prefix = "aliun.oss") public class OSSProperties { private String endpoint; private String accessKeyId; private String secretAccessKey; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1118584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年口碑不错的AI智能办公鼠标品牌企业推荐,专业的AI智能办公鼠标全解析 - myqiye

在AI技术深度融入工作场景的当下,一款高效的AI智能办公鼠标已成为企业降本增效、个人提升生产力的必备工具。面对市场上琳琅满目的产品,如何挑选口碑好、专业度高的品牌?以下根据不同技术方向,为你推荐2025年五大靠…

2026年AI智能办公鼠标推荐:信誉好的AI智能办公鼠标源头工厂有哪些? - mypinpai

本榜单依托市场调研与真实用户反馈,筛选出五家AI智能办公鼠标领域的优质企业,为企业及个人选型提供客观参考,助力精准匹配适配的AI办公工具伙伴。 TOP1 推荐:深圳市南方网通网络技术开发有限公司 推荐指数:★★★…

零基础入门三极管工作状态:从偏置电压讲起

从零开始搞懂三极管&#xff1a;偏置电压如何决定它是放大器还是开关&#xff1f;你有没有遇到过这样的情况——电路里明明接了三极管&#xff0c;但LED就是不亮&#xff1f;或者音频信号一放大就失真&#xff0c;声音像被“掐住脖子”&#xff1f;这些问题的背后&#xff0c;很…

运动训练方案设计:循序渐进达成体能提升目标

VibeThinker-1.5B&#xff1a;小模型如何实现高强度逻辑推理 在大模型军备竞赛愈演愈烈的今天&#xff0c;动辄千亿参数、数千万美元训练成本的AI系统已屡见不鲜。然而&#xff0c;在实验室之外的真实场景中&#xff0c;更多人面临的却是算力受限、部署困难、响应延迟等现实问…

上交大 × 华为小艺推出LoPA:7B扩散语言模型单样例1000+ tokens/s!

单样例推理速度对比&#xff1a;SGLang 部署的 Qwen3-8B (NVIDIA) vs. LoPA-Dist 部署 (NVIDIA & Ascend)&#xff08;注&#xff1a;NVIDIA平台相同&#xff0c;配置对齐&#xff09;在大语言模型&#xff08;LLMs&#xff09;领域&#xff0c;扩散大语言模型&#xff08;…

定制铂金坩埚生产厂家哪家好?2025年度榜单 - 品牌推荐大师

2021至2025年间,中国铂金坩埚产能年均复合增长率约为6.8%,2025年产量已突破12万件,市场规模达到约28亿元人民币。预计2026至2030年间将以年均复合增长率约9.5%的速度稳步扩张,到2030年市场规模有望突破43亿元;也有…

无人机自主导航试验:搭载VibeThinker实现避障决策

无人机自主导航试验&#xff1a;搭载VibeThinker实现避障决策 在消费级无人机穿越密集树林的飞行测试中&#xff0c;一个关键问题始终困扰着开发者&#xff1a;如何让飞行器在没有预设地图、算力有限的情况下&#xff0c;实时“想出”一条既能绕开突发障碍又能高效抵达目标的路…

Java 后端框架的龙头之选—Spring Boot

Java 后端框架的龙头之选—Spring Boot 在技术语言革新极快的今天,尤其对于需要技术沉淀的后端工程师来说,靠什么实力逆风翻盘?在 Java 框架尚且繁荣的当下,Spring Boot 无疑是最火最实用的,也是必不可少的开源框…

公益组织合作项目:为视障人士开发语音交互推理助手

公益组织合作项目&#xff1a;为视障人士开发语音交互推理助手 在一场面向特殊教育学校的调研中&#xff0c;一位视障高中生向我们提出了一个简单却令人深思的问题&#xff1a;“老师讲的几何证明我记不住步骤&#xff0c;能不能有个‘会思考’的声音&#xff0c;像同桌一样一步…

法律条文解释助手:梳理复杂法规之间的引用网络

法律条文解释助手&#xff1a;梳理复杂法规之间的引用网络 在法律实务中&#xff0c;一个看似简单的条款适用问题&#xff0c;往往牵扯出一张错综复杂的引用网络。比如&#xff0c;“初次违法能否免罚”这一问题&#xff0c;可能同时涉及《行政处罚法》第33条、“两高”司法解释…

CWDM光模块 是啥

CWDM光模块 是啥CWDM 光模块 是一种用于光纤通信的 粗波分复用(Coarse Wavelength Division Multiplexing)光模块,在通信、数据中心、工业网络里都很常见。 我给你用工程师能听懂的方式讲👇一句话先懂CWDM 光模块…

Spring-boot读书笔记一enableByDefault

enableByDefault is a parameter in the @Endpoint annotation that controls whether the custom actuator endpoint is automatically enabled or requires explicit configuration. enableByDefault Details: Synta…

2026年东莞304不锈钢卷推荐厂商排行榜,精选304不锈钢卷优质厂家推荐 - myqiye

为帮下游企业高效锁定适配自身需求的304不锈钢卷供应合作伙伴,避免采购走弯路,我们从材质合规性(如食品级认证、成分达标率)、加工精度(分条/平板误差控制)、交付效率(常规/定制订单周期)、服务响应速度(选型…

电磁辐射安全监测:基站布局合理性分析模型

电磁辐射安全监测&#xff1a;基站布局合理性分析模型 在城市化进程不断加快的今天&#xff0c;5G基站如雨后春笋般遍布居民区、商业中心和交通枢纽。然而&#xff0c;公众对“头顶上的信号塔是否安全”的疑虑也日益增长——电磁辐射究竟会不会超标&#xff1f;新建基站会不会影…

NFT价值评估模型:基于稀缺性与社区活跃度推理

NFT价值评估模型&#xff1a;基于稀缺性与社区活跃度推理 在NFT市场狂飙突进的这几年&#xff0c;我们见证过天价拍卖的辉煌&#xff0c;也亲历了无数项目归零的沉寂。一张像素头像卖到数百万美元&#xff0c;而更多精心设计的作品却无人问津——这种极端分化背后&#xff0c;暴…

股市波动归因分析:寻找隐藏在数据背后的根本动因

股市波动归因分析&#xff1a;寻找隐藏在数据背后的根本动因 在金融市场的喧嚣中&#xff0c;一次突如其来的股市暴跌总能引发无数猜测——是美联储的一句鹰派言论&#xff1f;某科技巨头财报暴雷&#xff1f;还是地缘冲突突然升级&#xff1f;分析师们争先恐后地给出解释&…

Docker Falco 规则进阶实战(从入门到高阶定制)

第一章&#xff1a;Docker Falco 规则自定义概述 Falco 是一个开源的云原生运行时安全工具&#xff0c;能够实时检测异常行为和潜在威胁。在 Docker 环境中&#xff0c;Falco 通过内核级事件捕获机制监控容器活动&#xff0c;并依据预定义规则触发告警。然而&#xff0c;标准规…

2026年度靠谱的AI智能办公鼠标品牌企业推荐:不错的AI智能办公鼠标品牌企业有哪些? - 工业品牌热点

本榜单依托市场实测数据、用户真实反馈与技术实力评估,筛选出五家标杆企业,为个人与企业选型提供客观参考,助力匹配适配的AI办公生产力工具。 TOP1 推荐:深圳市南方网通网络技术开发有限公司 推荐指数:★★★★★…

谁是行业标杆?2025-2026国产快速导热仪知名品牌与领先企业盘点 - 品牌推荐大师1

在材料科学、新能源、电子封装及建筑节能等高技术领域,导热性能的精准测量已成为研发与质量控制的关键环节。快速导热仪作为核心检测设备,其国产化进程近年来显著提速。本文从专业测评员视角,对当前国产快速导热仪市…

安全事件响应手册:标准化应急处置推理流程

安全事件响应手册&#xff1a;标准化应急处置推理流程 在当前人工智能技术快速迭代的背景下&#xff0c;大模型“越大越强”的范式正面临边际效益递减的挑战。尤其是在数学证明、算法设计等需要严密逻辑链条的任务中&#xff0c;参数规模的增长并不总能带来推理能力的线性提升。…