SpringBoot常用注解

SpringBoot常用注解

SpringBoot摒弃了xml配置方式,改为了全注解驱动。

准备

创建SpringBoot模块

在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.louis</groupId><artifactId>boot3-03</artifactId><version>0.0.1-SNAPSHOT</version><name>boot3-03</name><description>boot3-03</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.18</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

1、组件注册

@Configuration、@SpringBootConfiguration
@Bean
@Controller、@Service、@Repository、@Component
@Import
@ComponentScan

组件注册注解使用

场景:使用Bean的方式给容器中放组件

1、使用@Configuration编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean或使用@Import导入第三方组件

创建实体类User

package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private String name;private Integer age;private String pwd;
}

创建一个配置类UserConfig

package com.louis.config;import com.louis.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 组件默认是单实例的,即获取两次之后的值都是相等的,如果想要设置多实例,可以使用注解@Scope*/
@Configuration//这是一个配置类,代替以前的配置文件,配置类本身那个也是容器中的组件
public class UserConfig {@Bean//替代以前配置文件中的bean标签,组件在容器中的名字默认是方法名,可以直接修改注解的值。@Bean("haha")public User testUser(){User user = new User();user.setName("louie");user.setAge(23);user.setPwd("1111");return user;}
}

也可以使用注解@SpringBootConfiguration,它和@Configuration注解的作用是一样的,@Configuration代表普通配置类,@SpringBootConfiguration代表springBoot的配置类。

测试在ioc容器中是否有相关组件

package com.louis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Boot303Application {public static void main(String[] args) {var ioc = SpringApplication.run(Boot303Application.class, args);String[] names = ioc.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}}
}

除了@Bean(组件的名字是方法名)在ioc容器中放入组件外,还可以使用@Import(组件的名字是全类名)注解导入第三方组件。

2、条件注解

@ConditionalOnXxx

功能:如果指定的条件成立,则触发指定行为。

在这里插入图片描述

如:

条件注解功能
@ConditionalOnClass如果类路径中存在这个类,则触发指定行为。
@ConditionalOnMissingClass如果类路径中不存在这个类,则出发指定行为。
@ConditionalOnBean如果容器中存在这个Bean(组件),则触发指定的行为。
@ConditionalOnMissingBean如果容器中不存在这个Bean(组件),则触发指定行为。

场景:

1、如果存在FastsqlException这个类,给容器中放一个Cat组件,名为cat01;否则就给容器中放一个dog组件,名为dog01

2、 如果系统中有dog01这个组件,就给容器中放一个User组件,名为zhangsan,否则就放一个User,名叫lisi

条件注解使用

创建实体类Dog

package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dog {private String name;private String age;
}

创建实体类Cat

package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Cat {private String name;private String color;
}

创建配置类Appconfig

package com.louis.config;import com.louis.bean.Cat;
import com.louis.bean.Dog;
import com.louis.bean.User;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.context.annotation.Bean;@SpringBootConfiguration
public class AppConfig {@ConditionalOnClass(name="com.alibaba.druid.FastsqlException")@Beanpublic Cat cat01(){return new Cat();}@ConditionalOnMissingClass(value = "com.alibaba.druid.FastsqlException")@Beanpublic Dog  dog01(){return new Dog();}@ConditionalOnBean(value = Dog.class)@Beanpublic User zhangsan(){return new User();}@ConditionalOnMissingBean(value = Dog.class)@Beanpublic User lisi(){return new User();}}

测试

import com.louis.bean.User;
import com.louis.bean.Cat;
import com.louis.bean.Dog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Boot303Application {public static void main(String[] args) {var ioc = SpringApplication.run(Boot303Application.class, args);for (String s : ioc.getBeanNamesForType(Cat.class)) {System.out.println("cat = " + s);}for (String s : ioc.getBeanNamesForType(Dog.class)) {System.out.println("dog = " + s);}for (String s : ioc.getBeanNamesForType(User.class)) {System.out.println("user = " + s);}}}

在这里插入图片描述

放在类级别,如果注解判断生效,则整个配置类才生效,放在方法级别,判断生效则这个配置方法生效。


3、属性绑定

注解功能
@ConfigurationProperties声明组件的属性和配置文件哪些前缀开始项进行绑定
@EnableConfigurationProperties快速注册注解,一般用于第三方写好的组件进行属性绑定(springBoot默认只扫描主程序所在包及其子包)

将容器中任意组件(Bean)的属性值给配置文件的配置项的值进行绑定

属性绑定使用

实例1:

@ConfigurationProperties+@Component

注意:

1、需要先放在容器中再使用@ConfigrationProperties才会有用

2、使用@ConfigurationProperties声明组件和配置文件的那些配置项进行绑定

创建实体类Pig

创建实体类Pig

package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pig {private Integer id;private String name;
}
在配置文件application.properties中添加配置
pig.id=11
pig.name=GGBond
获取配置中的值

Pig类注册到容器中,并使用@ConfigurationProperties绑定值。

package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "pig")//prefix表示前缀,将前缀是pig的值绑定
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pig {private Integer id;private String name;
}
测试
package com.louis;import com.louis.bean.Pig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Boot303Application {public static void main(String[] args) {var ioc = SpringApplication.run(Boot303Application.class, args);Pig bean = ioc.getBean(Pig.class);System.out.println("pig = " + bean);}}
//pig = Pig{id=11, name='GGBond'}

如果使用的中文出现了乱码情况,可以在settings中搜索file encodings, 设置global、project Encoding,以及下面的default Encoding…为UTF-8,并勾选Transparent…的选框。

实例2:

@ConfigurationProperties + @EnableConfigurationProperties
EnableConfigurationProperties有两个作用:
1、开启属性绑定

2、默认会将这个组件放在容器中

创建实体类Sheep
package com.louis.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;/*** @author XRY* @date 2023年07月10日15:37*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ConfigurationProperties(prefix = "sheep")
public class Sheep {private Long id;private String name;private Integer age;
}
在application.properties中添加内容
sheep.id=1
sheep.name=美羊羊
sheep.age=2
测试
package com.louis;import com.louis.bean.Person;
import com.louis.bean.Pig;
import com.louis.bean.Sheep;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties(Sheep.class)
//EnableConfigurationProperties有两个作用,1、开启sheep的属性绑定2、默认会将这个组件放在容器中
public class Boot303Application {public static void main(String[] args) {var ioc = SpringApplication.run(Boot303Application.class, args);Sheep sheep = ioc.getBean(Sheep.class);System.out.println("sheep = " + sheep);}}
//sheep = Sheep(id=1, name=美羊羊, age=2)

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

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

相关文章

使用JS实现一个简单的观察者模式(Observer)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 手撸Observer⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

Unity之3D物理导航系统

一 介绍 Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路&#xff0c;比如可以制作点击某个位置&#xff0c;让角色自动的绕开障碍走到目标点的效果&#xff0c;比如可以制作敌人AI&#xff0c;让它可以通过NavMesh绕开障碍追击我方单…

深入理解 JVM 之——字节码指令与执行引擎

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 类文件结构 Write Once&#xff0c;Run Anywhere 对于 C 语言从程序到运行需要经过编译的过程&#xff0c;只有经历了编译后&#xff0c;我们所编写的代码才能够翻译为机器可以直接运行的二进制代码&#x…

【web开发】4、JavaScript与jQuery

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、JavaScript与jQuery二、JavaScript常用的基本功能1.插入位置2.注释3.变量4.数组5.滚动字符 三、jQuery常用的基本功能1.引入jQuery2.寻找标签3.val、text、appe…

笔记 | 排序算法实现(Python)

排序算法 一、选择排序二、合并/归并排序三、快速排序四、计数排序 排序类型时间复杂度选择排序(Selection Sort) O ( n 2 ) O(n^{2} ) O(n2)合并/归并排序&#xff08;Merge Sort&#xff09; O ( n log ⁡ n ) O(n\log n ) O(nlogn)快速排序(Quick Sort)平均情况 O ( n log ⁡…

帧动画实现

背景&#xff1a; pag实现痛点 文档&#xff1a;libpag参考文档 1.打包依赖的类型缺失问题 2.pagview初始化文件过大,影响小程序打包 3.兼容性较差关键帧动画实现痛点: 当关键帧变化过多的时候&#xff0c;无法准确分辨出需要写出多少个关键帧&#xff0c;以及各个关键帧的具…

视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?

视频监控/视频汇聚/安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频云存储EasyCVR平台能在复…

身份识别与鉴权技术调研方案

对称加密算法 对称加密方式又称为私钥加密方式&#xff0c;该方式的加密和解密过程使用同一个密钥&#xff0c;因此该密钥又称为共享密钥。如图2.2所示&#xff0c;在对称加密方式中&#xff0c;发送方使用对称加密算法和共享密钥处理原始数据&#xff0c;得到一个加密后的密文…

IDEA新建的Moudle失效显示为灰色

现象&#xff1a;IDEA新建的Moudle失效显示为灰色&#xff01;&#xff01;&#xff01; 解决方案&#xff1a; 1. 右键点击父模块&#xff0c;选择Open Moudle Settings&#xff1a; 2. 点击加号&#xff0c;选择Import Moudle - 导入模块&#xff1a; 3. 找到对应模块的po…

0016Java程序设计-springboot幼儿园管理系统

摘 要目 录系统设计开发环境 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于幼儿园管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了幼儿园管理系统&a…

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果

一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候&#xff0c;继续滑动可以让弹窗向下收起来弹出上下拖动的时候&#xff0c;视图内容跟着上下移动、缩放大小 二、实现弹窗上下滑动的时候&#xff0c;动态改变内容区的位置和大小 通过…

HD系列边缘网关,助力工商业储能发展!

HD系列边缘网关具备低功耗、高性能、接口丰富等特点&#xff0c;可以实现如通信规约转换、远程调度、智能监测、通信管理等多种应用&#xff0c;适用于储能系统的能源管理系统。 1.1硬件接口 该产品板载瑞芯微 RK3568 处理器&#xff0c;可选配2G16G/432 等配置。机壳采用标准 …

sql:SQL优化知识点记录(十四)

&#xff08;1&#xff09;索引失效行锁变表锁 建立2个索引 索引是失效后&#xff0c;系统性能会变查&#xff0c;如果涉及到锁的话&#xff0c;行锁会变表锁 有一个问题&#xff0c;当session1用b字段做查询条件因为是varchar类型&#xff0c;需要加双引号&#xff0c;但是没…

GO语言网络编程(并发编程)并发介绍,Goroutine

GO语言网络编程&#xff08;并发编程&#xff09;并发介绍&#xff0c;Goroutine 1、并发介绍 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更…

sqlserver 各种集合、区间、 时间轴(持更)

1.所有有交集的区间 场景&#xff1a;在事件表里查找某年员工的岗位系数&#xff0c;并计算其加权平均数。case1&#xff1a;该员工是老员工&#xff0c;从2020年一直到2049年。case2&#xff1a;该员工是老员工&#xff0c;但是今年离职。case3&#xff1a;该员工是今年的新员…

线程池|单例模式|STL、智能指针线程安全|读者写者问题

线程池 线程池的逻辑思想&#xff1a; 每当我们处理一个任务就要创建一个线程&#xff0c;创建线程的开销是很大的。因此我们可以预先创建一批线程&#xff0c;任务队列里没有任务的时候&#xff0c;每个线程都休眠&#xff0c;当队里中有任务的时候&#xff0c;就可以唤醒线程…

YOLOV7改进-针对小目标的NWD(损失函数)

link 1、复制这些 2、utils-loss&#xff0c;这里加 3、把这几行复制到utiils的loss.py 4、先对CoputerLoss类做修改 5、把那一行替换成这个 6、修改 7、iou_ration是超参&#xff0c;可以调&#xff0c;如果小目标比较多的话&#xff0c;这个值可以低一些&#xff0c;…

入门人工智能 —— 学习 python 使用 IDE :vscode 完成编程 (2)

入门人工智能 —— 学习 python 使用 IDE &#xff1a;vscode 完成编程 &#xff08;2&#xff09; 安装和配置 VSCode创建和运行 Python 代码使用 VSCode 的调试功能 在上一篇文章中&#xff0c;介绍了如何入门人工智能编程&#xff0c;并开始了学习 Python 编程语言的基础知识…

英诺森 “供应链智能数据平台”荣获“科技进步奖”

近日&#xff0c;2023年中国物流与采购联合会科学技术奖正式公布&#xff0c;该奖项经国家科技部批准&#xff0c;在国家科学技术奖励工作办公室登记备案&#xff0c;是我国物流行业最具影响力的奖项之一。 英诺森联合客户申报的科技项目“英诺森供应链智能数据平台”&#xf…

1.1 计算机网络在信息时代中的作用

思维导图&#xff1a; 正文&#xff1a; 我的理解&#xff1a; 这段话是一本书或课程的第一章简介&#xff0c;它的目的是为读者或学生提供一个关于计算机网络基础知识的框架或大纲。 首先&#xff0c;它强调了这章是整本书的一个概览&#xff0c;会先介绍计算机网络在信息时…