springboot注解(全)
一、什么是Spring Boot
Spring Boot是一个快速开发框架,快速的将一些常用的第三方依赖整合(通过Maven子父亲工程的方式),简化xml配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以Java应用程序进行执行。
二、Spring常用注解
Spring常用注解(全)
三、Spring Boot常用注解
1、@SpringBootApplication
替代 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
2、@ImportAutoConfiguration
导入配置类,一般做测试的时候使用,正常优先使用@EnableAutoConfiguration
3、@SpringBootConfiguration
替代@Configuration
4、@ImportResource
将资源导入容器
5、@PropertySource
导入properties文件
6、PropertySources
@PropertySource 的集合
7、@Role
bean角色定义为ROLE_APPLICATION(默认值)、ROLE_SUPPORT(辅助角色)、ROLE_INFRASTRUCTURE(后台角色,用户无感)
8、@Scope
指定bean的作用域,默认singleton,其它包括prototype、request、session、globalSession
9、@Lazy
使bean懒加载,取消bean预初始化。
10、@Primary
自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否者将抛出异常。
11、@Profile
指定Bean在哪个环境下被激活
12、@DependsOn
依赖的bean注册完成,才注册当前类,依赖bean不存在会报错。用于控制bean加载顺序
13、@PostConstruct
bean的属性都注入完毕后,执行注解标注的方式进行初始化工作
14、@Autowired
默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。
15、@Lookup
根据方法返回的类型,去容器中捞出对应
16、@Qualifier
申明bean名字,且可以按bean名字加载bean
17、@Required
检查bean的属性setXXX()方法,要求属性砸死配置阶段必须已配置
18、@Description
添加bean的文字描述
19、@EnableAspectConfiguration
启动AspectJ自动配置
20、EnableLoadTimeWeaving
启动类加载器动态增强功能,使用instrumentation实现
21、@AutoConfigurationPackage
包含该注解的package会被AutoConfigurationPackages注册
22、@AutoConfigureBefore
在指定配置类初始化前加载
23、@AutoConfigureAfter
在指定配置类初始化后加载
24、@AutoConfigureOrder
指定配置类初始化顺序,越小初始化越早
25、@ModelAttribute
@ModelAttribute注解可被应用在方法和方法参数上。
(1)对方法使用 @ModelAttribute 注解:
注解在方法上的@ModelAttribute说明了方法的作用是用于添加一个或多个属性到model上。这样的方法能接受与@RequestMapping注解相同的参数类型,只不过不能直接被映射到具体的请求上。
@ModelAttribute 方法会先被调用。
在同一个控制器中,注解了@ModelAttribute的方法实际上会在@RequestMapping方法之前被调用。以下是几个例子:
@Controller
public class ModelAttributeController {@ModelAttributepublic void init(Model model) {System.out.println("@RequestMapping方法");}@RequestMapping("/model-attribute")public String get() {System.out.println("@ModelAttribute方法");return "model-attribute";}}
可以使用 @ModelAttribute 标注的方法来设置其他 @ReqeustMapping 方法的公用参数
使用 @ModelAttribute(“key”) 来显示指定属性名。
(2)@ModelAttribute 和 @RequestMapping 注解在同一个方法上
如果 @ModelAttribute 和 @RequestMapping 注解在同一个方法上,那么代表给这个请求单独设置 Model
参数。此时返回的值是 Model 的参数值,而不是跳转的地址。跳转的地址是根据请求的 url 自动转换而来的。比如下面的例子中跳转页面不是
HelloWorld.jsp 而是 model-attribute.jsp。并且参数只有在 model-attribute.jsp
中能够取得,而 demo.jsp 中不能取得。
(3)在方法参数上使用 @ModelAttribute 注解
① 数据绑定
注解在方法参数上的@ModelAttribute说明了该方法参数的值将由model中取得。如果model中找不到,那么该参数会先被实例化,然后被添加到model中。在model中存在以后,请求中所有名称匹配的参数都会填充到该参数中。这在Spring
MVC中被称为数据绑定,一个非常有用的特性,节约了你每次都需要手动从表格数据中转换这些字段数据的时间。
② 和 BindingResult 配合使用
使用 @ModelAttribute 进行数据绑定之后,可以使用 BindingResult 来返回数据验证结果。数据验证可以使用
hibernate validation 的 @Valid 标签或者 spring Validator 校验机制的 @Validated
配合 BindingResult 使用。 或者自定义校验器来返回 BindingResult 对象来进行校验。你可以通过Spring的
表单标签来在同一个表单上显示错误信息。
@Valid 校验器:
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@Valid @ModelAttribute("pet") Pet pet, BindingResult result) {if (result.hasErrors()) {return "petForm";}// ...}
@Validated 校验器:
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@Validated @ModelAttribute("pet") Pet pet, BindingResult result) {if (result.hasErrors()) {return "petForm";}// ...}
自定义校验器:
@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {// 自己编写一个校验方法来处理 result 对象new PetValidator().validate(pet, result);if (result.hasErrors()) {return "petForm";}// ...}
四、选择器
@Conditional,当指定的条件都满足时,组件才被注册
@ConditionalOnBean,指定bean在上下文中时,才注册当前bean。用在方法上,则默认依赖类为方法的返回类型
@ConditionalOnClass,指定类在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
@ConditionalOnCloudPlatform,在指定云平台才注册配置
@ConditionalOnExpression,指定spel为true时注册配置
@ConditionalOnJava,在指定java版本时注册配置
@ConditionalOnJndi
@ConditionalOnMissingBean,指定bean不在上下文中时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
@ConditionalOnMissingClass,指定类不在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
@ConditionalOnNotWebApplication,不是在web环境才注册配置
@ConditionalOnProperty,配置文件中的值与指定值是否相等,相等才注册配置
@ConditionalOnResource,指定resources都在classpath上才注册配置
@ConditionalOnSingleCandidate,上下文中只有一个候选者bean时才注册配置
@ConditionalOnWebApplication,是在web环境才注册配置
五、缓存
@EnableCaching,开启缓存配置,支持子类代理或者AspectJ增强
@CacheConfig,在一个类下,提供公共缓存配置
@Cacheable,放着方法和类上,缓存方法或类下所有方法的返回值
@CachePut,每次先执行方法,再将结果放入缓存
@CacheEvict,删除缓存
@Caching,可以配置@Cacheable、@CachePut、@CacheEvict
六、定时器
@EnableScheduling,开启定时任务功能
@Scheduled,按指定执行周期执行方法
@Schedules,包含多个@Scheduled,可同时运行多个周期配置
@EnableAsync,开启方法异步执行的能力,通过@Async或者自定义注解找到需要异步执行的方法。通过实现AsyncConfigurer接口的getAsyncExecutor()和getAsyncUncaughtExceptionHandler()方法自定义Executor和异常处理。
@Async,标记方法为异步线程中执行
七、注入配置文件properties
@EnableConfigurationProperties,启动@ConfigurationProperties功能
@ConfigurationProperties,将properties文件里的内容,自动注入bean对应的属性中
@DeprecatedConfigurationProperty,用在配置文件的getter()方法上,标记字段已经过期,并提示替换的字段。一般给spring-boot-configuration-processor使用。
@NestedConfigurationProperty,标记在配置文件的字段上,提示spring-boot-configuration-processor,配置包含嵌套的配置。
spring-configuration-metadata.json 提供配置的元信息,在写properties配置时,会有语法提示。在项目中引入spring-boot-configuration-processor项目,会扫描@ConfigurationProperties注解,自动生成spring-configuration-metadata.json
八、Jpa
1、@Entity ,@Table(name=“”)
表明这是一个实体类,一般用于jpa,这两个注解一块使用,但是如果表名和实体类名相同的话,@Table可以省略。
2、@MappedSuperClass
基于代码复用和模型分离的思想,在项目开发中使用jpa的@MappedSuperClass注解,将实体类的多个属性分别封装到不同的非实体类中。例如,数据库表中都需要id来表示编号,id是这些映射实体类的通用属性,交给jpa统一生产主键id编号,那么使用一个父类来封装这些通用属性,并用@MappedSuperClass标识。
注意:
标注为@MappedSuperClass的类将不是一个完整的实体类,它将不会映射到数据库表,但是它的属性都映射到其子类的数据库字段中。
标注@MappedSuperClass的类不能再标注@#Entity或@Table注解,也无需实现序列化接口。
3、@NoRepositoryBean
一般用做父类的repository,有这个注解,spring不会去实例化该repository。
4、@Column
如果字段名和列名相同,则可以省略。
5、@Id
表示该属性为主键。
6、@Transient
表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标注为@Transient,否则,ORM框架默认将其注解为@Basic。
7、@Basic
@Basic 是实体类与数据库字段映射时最简单的类型。类型支持Java基本类型(byte、short、int、long、float、double、char、boolean),包装类,枚举类,以及实现了serializable接口的类型。
@basic注解有两个属性:
1.fetch用来指定属性的加载机制
有两个选项:EAGER(即时加载,默认值)和LAZY(懒加载),即时加载意味着当实例化对象的时候必须加载该属性值,懒加载是指当实例化对象时不加载该对象,只有当调用该属性时才加载。
2. optional用来指定属性是否可空
有两个选项:true(可空,默认值)和false
如果你的实体类上不加@Basic注解,它也会自动加上@Basic,并使用默认值。
8、@JsonIgnore
在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口。
Bean实体中会有某些运维字段,返回信息给前台的时候,不希望将对应值一并返回。此时可以在对应属性上加上@JsonIgnore,或者可以在User类上加上注解@JsonIgnoreProperties(value=“{password}”)
9、@JoinColumn、@OneToOne、@OneToMany、@ManyToOne
九、导入配置文件
1、@PropertySource
引入单个properties文件:
@PropertySource(value = {"classpath:xxxx/xxxx.properties"})
引入多个properties文件
@PropertySource(value = {"classpath:xxxx/xxxx.properties","classpath:xxxx/xxxx.properties"})
2、 @ImportResource导入xml配置文件
可以分为两种模式,相对路径的classpath,绝对路径的file。
注意:单文件可以不写value或locations。
取值:使用@Value注解取配置文件中的值
@Value("${properties中的键}")private String xxx;
3、@Import导入额外的配置文件
功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar。
@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
十、事务注解
@Transactional
在Spring中,事务有两种实现,分别是编程式事务和声明式事务。
编程式事务:
编程式事务使用TransationTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务,spring推荐使用TransationTemplate。
声明式事务:
建立在AOP基础上,其本质是对方法前后进行拦截,然后再目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用。
十一、Spring Cloud
1、@EnableEurekaServer
用在springboot启动类上,表示这是一个eureka服务注册中心;
2、@EnableDiscoveryClient
用在springboot启动类上,表示这是一个服务,可以被注册中心找到;
3、@LoadBalanced
开启负载均衡能力;
4、@EnableCircuitBreaker
用在启动类上,开启断路器功能;
5、@HystrixCommand(fallbackMethod=”backMethod”)
用在方法上,fallbackMethod指定断路回调方法;
6、@EnableConfigServer
用在启动类上,表示这是一个配置中心,开启Config Server;
7、@EnableZuulProxy
开启zuul路由,用在启动类上;
8、@SpringCloudApplication
@SpringBootApplication
@EnableDiscovertyClient
@EnableCircuitBreaker
分别是SpringBoot注解、注册服务中心Eureka注解、断路器注解。对于SpringCloud来说,这是每一微服务必须应有的三个注解,所以才推出了@SpringCloudApplication这一注解集合。
9、@ConfigurationProperties
(1)@ConfigurationProperties注解简介
Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。 该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上。
(2)代码实例
spring.datasource.url=jdbc:mysql://127.0.0.1:8888/test?useUnicode=false&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourcePro {private String url;private String username;private String password;// 配置文件中是driver-class-name, 转驼峰命名便可以绑定成private String driverClassName;private String type;...
}
以上代码就实现了通过配置文件对属性的赋值。
(3)注意事项
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便;
@ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”。
相关文章:
springboot注解(全)
一、什么是Spring Boot Spring Boot是一个快速开发框架,快速的将一些常用的第三方依赖整合(通过Maven子父亲工程的方式),简化xml配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat࿰…...
进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
目录 1.进制转换必备知识: 1.1 二进制逢2进1 8进制逢8进1 10进制逢10进1 16进制逢16进1 1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换 2.1 二进制转八进制 2.2 八…...
什么是UML?
文章目录 00 | 基础知识01 | 静态建模类图对象图用例图 02 | 动态建模时序图通信图状态图活动图 03 | 物理建模构件图部署图 UML(Unified Model Language),统一建模语言,是一种可以用来表现设计模式的直观的,有效的框图…...
5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签
本文目录 前言一、创建XML映射文件二、MybatisX插件安装三、mapper标签四、select标签UserMapper接口方法UserMapper.xml 五、resultMap标签定义resultMap标签修改select标签 总结 前言 MyBatis的强大在于它的语句映射,它提供了注解和XML映射文件两种开发方式&…...
“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)
目录 摘 要: 1 问题重述 1.1 问题背景 1.2 问题重述 2 模型假设 3 符号说明...
C6678开发概述与Sys/bios基本使用
C6678开发概述 参考开发环境标记及术语创建sys/bios自定义平台运行第一个sys/bios程序Clock模块使用Demo 参考 TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Datasheet TMS320C66x DSP CorePac User Guide 官方手册 创龙6678开发教程 开发环境 …...
python算法中的图算法之网络流算法(详解二)
目录 学习目标: 学习内容: 网络流算法 Ⅰ. 网络流模型 Ⅱ . Ford-Fulk...
企业电子招投标采购系统之项目说明和开发类型源码
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…...
ERTEC200P-2 PROFINET设备完全开发手册(8-1)
8.1 IRT通讯实验 这里我们使用APP3 IsoApp,修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 3 使能App3,对应的主程序为“usriod_main_isoapp.c” 编译后下载运行。打开4.2建立的TIA项目,添加等时模式组织块,…...
手撕Twitter推荐算法
Twitter近期开源了其推荐系统源码[1,2,3],截止现在已经接近36k star。但网上公开的文章都是blog[1]直译,很拗口,因此特地开个系列系统分享下。系列涵盖: Twitter整体推荐系统架构:涵盖图数据挖掘、召回、精排、规则多…...
JAVA多态性测试的基本实验------JAVA入门基础教程
package duotai;public class Person {public void eat(){System.out.println("人吃饭");}public void Pdrink(){System.out.println("人喝水");} }package duotai;public class Man extends Person {public void eat(){System.out.println("男人吃饭…...
小说作者推荐: 妄鸦合集
《惊悚练习生》作品介绍 主人公叫弥赛亚,宗九的小说是《惊悚练习生》,它的作者是妄鸦倾心创作的一本现代耽美、娱乐圈、才女类型的小说,书中主要讲述了:作者:妄鸦 落魄魔术师宗九穿书了他穿到一本恐怖无限流选秀文里,…...
MySQL-自带工具介绍
目录 🍁mysql 🍁mysqladmin 🦐博客主页:大虾好吃吗的博客 🦐MySQL专栏:MySQL专栏地址 MySQL数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql&a…...
12个你应该知道的Python库
12个你应该知道的Python库 1. python命令行argparse 更简单的begins2. colorama改善命令行窗口3. pyqtgraph 它提供了不同的功能选择,尤其适用于实时和交互式可视化4. 网页浏览器Pywebview5. psutil 提供了完整的获取系统信息的方法 或许cpu近5s的基本报告6. Watchd…...
【数据分析之道-NumPy(七)】numpy字符串函数
文章目录 专栏导读1、函数说明2、add()函数3、multiply()函数4、center()函数5、capitalize()函数6、title()函数7、lower()函数8、upper()函数9、split()函数10、splitlines()函数11、strip()函数12、join()函数 专栏导读 ✍ 作者简介:i阿极,CSDN Pytho…...
【Linux】Linux基本指令(1)
一.前言 从这篇文章开始,博主就开启了Linux学习之路了,本篇文章也是博主的第一篇Linux的文章,今后也会持续不断更新的。 二.理解文件 1.文件 文件文件数据文件属性(所以一个建好的文件就算没有数据,也占用存储空间&am…...
更全面的对比GPT4和Claude对MLIR的掌握能力
本文构造了20个MLIR基础概念的问题以及使用OneFlow IR转换为Tosa IR的5个代码段来评测GPT4和Claude对于MLIR的掌握能力,我的结论是对于基础概念的理解Claude整体上和GPT4持平,而在阅读相关代码片段时Claude表现出了比GPT4更强一点的理解能力。 0x0. 前言…...
阿里ARouter 路由框架解析
一、简介 众所周知,在日常开发中,随着项目业务越来越复杂,项目中的代码量也越来越多,如果维护、扩展、解耦等成了一个非常头疼问题,随之孕育而生的诸如插件化、组件化、模块化等热门技术。 而其中组件化中一项的难点&…...
大型医院健康体检管理系统源码(PEIS)
一、体检管理系统(PEIS)概念 体检管理系统(PEIS)是以健康为中心的身体检查。一般医学家认为健康体检是指在身体尚未出现明显疾病时,对身体进行的全面检查。方便了解身体情况,筛查身体疾病。即应用体检手段对…...
java 获取时间的方法
Java的时间是通过字节码指令来控制的,所以 java程序的运行时间是通过字节码指令来控制的。但是由于 Java程序在运行时, JVM会产生一些状态,所以在执行 JVM指令时, JVM也会产生一些状态。 我们在执行 java程序时,主要是…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
