SpringBoot核心配置和注解
目录
一、注解
元注解
基本注解
启动注解
二、配置
格式介绍
读取配置文件信息
案例演示1
嵌套读取bean信息
案例演示2
读取Map,List 以及 Array 类型配置数据
案例演示3
三、总结
一、注解
之前我们了解了SpringBoot基础和AOP简单应用,这期来讲讲SpringBoot核心配置和注解
SpringBoot注解就是给代码打上标签的能力。通过引入注解,我们可以简单快速赋予代码生命力,大大提高代码可读性和扩展性。注解本身不具有任何能力,只是一个标签,但是我们可以定义各种标签然后实现各种标签处理器来对类、方法、属性甚至参数等进行功能扩展、功能开启、属性定义、行为定义、规则定义、关联处理、元数据定义等等。
元注解
@Documented:将会在被此注解注解的元素的javadoc文档中列出注解,一般都打上这个注解没坏处
@Target
注解能被应用的目标元素,比如类、方法、属性、参数等等,需要仔细思考
@Retention
仅在源码保留,还是保留到编译后的字节码,还是到运行时也去加载,超过90%的应用会在运行时去解析注解进行额外的处理,所以大部分情况我们都会设置配置为RetentionPolicy.RUNTIME
@Inherited
如果子类没有定义注解的话,能自动从父类获取定义了继承属性的注解,比如Spring的@Service是没有继承特性的,但是@Transactional是有继承特性的,在OO继承体系中使用Spring注解的时候请特别注意这点,理所当然认为注解是能被子类继承的话可能会引起不必要的Bug,需要仔细斟酌是否开启继承
@Repeatable
Java 8引入的特性,通过关联注解容器定义可重复注解,小小语法糖提高了代码可读性,对于元素有多个重复注解其实是很常见的事情,比如某方法可以是A角色可以访问也可以是B角色可以访问,某方法需要定时任务执行,要在A条件执行也需要在B条件执行
@Native
是否在.h头文件中生成被标记的字段,除非原生程序需要和Java程序交互,否则很少会用到这个元注解
基本注解
@Service: 注解在类上,表示这是一个业务层bean
@Controller:注解在类上,表示这是一个控制层bean
@Repository: 注解在类上,表示这是一个数据访问层bean
@Component: 注解在类上,表示通用bean ,value不写默认就是类名首字母小写
@Autowired:按类型注入.默认属性required= tru
@Resource: 按名称装配。
启动注解
SpringBootApplication
包括以下三个注解:
@SpringBootConfiguration
@Configuration: JavaConfig的功能,配置类,结合@Bean能够将对象注入到spring的IOC容器。@SpringBootConfiguration标注的类是配置类。
@EnableAutoConfiguration
开启自动配置。 将spring和第三方库中的对象创建好,注入到spring容器避免写xml,去掉样例代码。 需要使用的对象,由框架提供。
@ComponentScan
组件扫描器,<context:component-scan base-package="xxx包"/> 扫描@Controller, @Service, @Repository ,@Component注解, 创建他们的对象注入到容器
springboot约定:启动类,作为扫描包的根(起点)
二、配置
格式介绍
配置文件有两种格式分别:properies 和 yaml(yml)。
properties 是Java 中的常用的一种配置文件格式,文件扩展名为properties。
语法格式是:key=value。key 是唯一的。
yaml(Yet Another Markup Language)),是一种做配置文件的数据格式,文件扩展名是yaml 或yml(常用)
语法格式是:key:[空格]值。
YAML 基本语法规则:
大小写敏感
使用缩进表示层级关系
缩进只可以使用空格,不允许使用Tab 键
缩进的空格数目不重要,相同层级的元素左侧对齐即可
#字符表示注释,只支持单行注释。#放在注释行的第一个字符
YAML 缩进必须使用空格,而且区分大小写,建议编写YAML 文件只用小写和空格。
YAML 支持三种数据结构
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
标量(scalars):单个的、不可再分的值,例如数字、字符串、true|false 等
存放路径:src/main/resource目录或者类路径的/config
读取配置文件信息
Spring Boot 同时支持 properties 和 yml 格式的配置文件。配置文件名称默认是 application 。我们可以使用application.properties 、 application.yml。
读取配置文件的key 值,注入到Bean 的属性可用@Value,@Value 一次注入一个key 的值。
将多个key 值绑定到Bean 多个属性可以配合ConfigurationProperties 注解。
在代码中访问属性还可以使用外部化配置的抽象对象Environment。使用Environment 的注入此对象,调用它的getProperty(String key)方法即可。
案例演示1
需求:在application.properties 提供应用程序的name,owner, port 基本信息,程序读取这些数据,显示给用户。
步骤1:新建maven项目,无需添加依赖
步骤2:在application.properties 自定义配置项目

步骤3: 创建SomeService 类读取app.name, app.owner,app.port 配置key。
注解@Value 读取单个值,语法${key:默认值}

@Service
public class SomeService {@Value("${app.name}")private String name;@Value("${app.owner}")private String owner;@Value("${app.port:8088}")private Integer prot;public void printValue(){//链接字符串StringJoiner joiner = new StringJoiner(";");joiner.add(name).add(owner).add(String.valueOf(prot));//打印出字符串String result = joiner.toString();System.out.println("result= "+ result);}
步骤4:单元测试
在test 目录下创建测试类,注入SomeService 对象,调用它的printValue()方法。


嵌套读取bean信息
案例演示2
需求:Bean 中包含其他Bean 作为属性,将配置文件中的配置项绑定到Bean 以及引用类型的成员。Bean 的定义无特殊要求。
步骤1:在resources文件夹下新建 .yml 后缀的文件,添加依赖

在 pom.xml 文件里添加以下依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>
步骤2:新建pk02包,并建立两个类


//DoubBean
@Configuration(proxyBeanMethods = false)
@ConfigurationProperties(prefix = "app1")
@Service
public class DoubBean {private String name;private String owner;private Integer port;private Seri ser;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getOwner() {return owner;}public void setOwner(String owner) {this.owner = owner;}public Integer getPort() {return port;}public void setPort(Integer port) {this.port = port;}public Seri getSer() {return ser;}public void setSer(Seri ser) {this.ser = ser;}@Overridepublic String toString(){return "DoubBean{ \n"+"网站名="+name+"\n" +",浏览器cookic="+owner+"\n" +",端口="+port+"\n" +"用户信息:"+ser+"}";}
// Seri
public class Seri {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {this.userpass = userpass;}@Overridepublic String toString(){return "用户名:" + username +" 用户密码:" + userpass;}}
步骤3:添加扫描包和单元测试方法
一定要先去启动类上面添加扫描注解,并设置好扫描的包



读取Map,List 以及 Array 类型配置数据
案例演示3
Map,List 以及 Array 都能提供配置数据, 下面通过一个示例配置演示过程:
步骤1:在刚才的 application.yml 文件接着写入不同类型数据

步骤2:添加pk3包,新建以下类文件

//Users
public class Users {private String name;private String sex;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString(){return "MyServer{ " +"name: " + name +"\n"+"sex: " + sex +"\n" +"age= "+age+" }"+"\n";}
}
//ConutClass
@Data
@ConfigurationProperties
public class ConutClass {private List<Servers> servers;private Map<String,Users> users;private String [] names;@Overridepublic String toString(){return "ConutClass{ \n"+"网站服务器:"+"\n"+servers+"\n" +"用户信息列表:"+"\n"+users+"\n" +"名字列:"+"\n"+names+"\n" +"}";}
}
//Servers
public class Servers {private String title;private String ip;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}@Overridepublic String toString(){return "MyServer{ " +"title: " + title +"\n"+"ip: " + ip + " }"+"\n";}
}
步骤4:添加扫描包和测试单元
@ConfigurationPropertiesScan注解只能添加一次,所以多个扫描包可以用存放在大括号里面,用逗号隔开



三、总结
在这篇文章中,我们重点关注了常用的注解和Bean的读取和测试。
Spring Boot使用
application.properties或application.yml文件来管理应用程序的配置
@SpringBootApplication注解用于开启Spring Boot应用程序的启动类,它组合了@Configuration、@EnableAutoConfiguration和@ComponentScan的功能。@RestController注解将一个类标记为RESTful API的控制器,而@RequestMapping注解用于将HTTP请求映射到控制器方法上。另外,依赖注入的注解
@Autowired,它可以自动注入依赖。最后是@Bean注解,它可以将方法返回的实例注册为Bean,并添加到Spring的应用程序上下文中。
本篇内容就到这了,如果有好的建议和不妥之处,欢迎大家评论区点赞留言转发
相关文章:
SpringBoot核心配置和注解
目录 一、注解 元注解 基本注解 启动注解 二、配置 格式介绍 读取配置文件信息 案例演示1 嵌套读取bean信息 案例演示2 读取Map,List 以及 Array 类型配置数据 案例演示3 三、总结 一、注解 之前我们了解了SpringBoot基础和AOP简单应用,这期来讲…...
第三章 图论 No.3 flody之多源汇最短路,传递闭包,最小环与倍增
文章目录 多源汇最短路:1125. 牛的旅行传递闭包:343. 排序最小环:344. 观光之旅345. 牛站 flody的四个应用: 多源汇最短路传递闭包找最小环恰好经过k条边的最短路 倍增 多源汇最短路:1125. 牛的旅行 1125. 牛的旅行 …...
Leetcode-每日一题【剑指 Offer 17. 打印从1到最大的n位数】
题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1输出: [1,2,3,4,5,6,7,8,9] 说明: 用返回一个整数列表来代替打印 n 为正整数 解题思路 前置知识 M…...
远程调试MySQL内核
1 vscode 需要安装remote-ssh插件 安装成功后,登录: 默认远程服务器的登录 ssh rootip注意,Linux需要设置root远程登录; 2 安装debug扩展 C\C extemsion Pack C\C3 设置Attach进程 {// Use IntelliSense to learn about poss…...
前端学习---vue2--选项/数据--data-computed-watch-methods-props
写在前面: vue提供了很多数据相关的。 文章目录 data 动态绑定介绍使用使用数据 computed 计算属性介绍基础使用计算属性缓存 vs 方法完整使用 watch 监听属性介绍使用 methodspropspropsData data 动态绑定 介绍 简单的说就是进行双向绑定的区域。 vue实例的数…...
UML-构件图
目录 1.概述 2.构件的类型 3.构件和类 4.构件图 1.概述 构件图主要用于描述各种软件之间的依赖关系,例如,可执行文件和源文件之间的依赖关系,所设计的系统中的构件的表示法及这些构件之间的关系构成了构件图 构件图从软件架构的角度来描述…...
uniapp使用视频地址获取视频封面
很多时候我们都需要使用视频的第一帧当作视频的封面,今天我们从uni-app的安卓app这个环境来实现下这个需求。文中需要你对uniapp的renderjs有一定了解,可以先看我的这篇文章初识renderjs uniapp 安卓APP端(ios未测试) 方法&…...
java操作PDF:转换、合成、切分
将PDF每一页切割成图片 PDFUtils.cutPNG("D:/tmp/1.pdf","D:/tmp/输出图片路径/"); 将PDF转换成一张长图片 PDFUtils.transition_ONE_PNG("D:/tmp/1.pdf"); 将多张图片合并成一个PDF文件 PDFUtils.merge_PNG("D:/tmp/测试图片/"); 将多…...
递增子序列——力扣491
文章目录 题目描述递归枚举 + 减枝题目描述 递归枚举 + 减枝 递归枚举子序列的通用模板 vector<vector<int>> ans; vector<int> temp; void dfs(int cur...
解密!品牌独立站为何能成为外国消费者的心头爱?
中国人做事强调要知其然、知其所以然、知其所以必然。这一理念非常符合新时代中国跨境出海品牌独立站的发展思路。在做好品牌独立站之前,我们也必须知其然(什么是独立站?),知其所以然(为什么要建独立站&…...
【HDFS】每天一个RPC系列----complete(二):客户端侧
上图给出了最终会调用到complete RPC的客户端侧方法链路(除去Router那条线了)。 org.apache.hadoop.hdfs.DFSOutputStream#completeFile(org.apache.hadoop.hdfs.protocol.ExtendedBlock): 下面这个方法在complete rpc返回true之前,会进行重试,直到超过最大重试次数抛异…...
五、PC远程控制ESP32 LED灯
1. 整体思路 2. 代码 # 整体流程 # 1. 链接wifi # 2. 启动网络功能(UDP) # 3. 接收网络数据 # 4. 处理接收的数据import socket import time import network import machinedef do_connect():wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected(…...
详解PHP反射API
PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵活,而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作&…...
打开虚拟机进行ip addr无网络连接
打开虚拟机进行ip addr无网络连接 参考地址:https://www.cnblogs.com/Courage129/p/16796390.html 打开虚拟机进行ip addr无网络连接。 输入下面的命令, sudo dhclient ens33 会重新分配一个新的ip地址,但是此时的ip地址已经不是我原先在虚…...
Spring Boot如何整合mybatisplus
文章目录 1. 相关配置和代码2. 整合原理2.1 spring boot自动配置2.2 MybatisPlusAutoConfiguration2.3 debug流程2.3.1 MapperScannerRegistrar2.3.2MapperScannerConfigurer2.3.3 创建MybatisPlusAutoConfiguration2.3.4 创建sqlSessionFactory2.3.5 创建SqlSessionTemplate2.…...
webpack基础知识一:说说你对webpack的理解?解决了什么问题?
一、背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各自单独放到不同的JS 文件中 约定每个文件是一…...
小研究 - 基于 MySQL 数据库的数据安全应用设计(二)
信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时…...
大数据-数据内容分类
大数据-数据内容分类 结构化数据 可以使用关系型数据库表示和存储,可以用二维表来逻辑表达实现的数据 结构化数据:二维表(关系型) 结构化数据:先有结构、再有数据 数据以行为单位,一行数据表示一个实体…...
Babel编译与Webpack
目录 Babel初识BabelBabel 使用方式使用 Babel 前的准备工作 WebpackWebpack介绍Webpack初体验Webpack核心概念入口(entry)出口(output)加载 (loader)插件(plugins) Babel Babel官网: https://babeljs.io/…...
0805hw
1. #include <myhead.h> void Bub_sort(int *arr,int n)//冒泡排序 {for(int i1;i<n;i){int count0;for(int j0;j<n-i;j){if(arr[j]>arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;count;}}if(count0){break;}}printf("冒泡排序后输出结果:\n"…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
