springboot3常用注解使用

组键注册注解

 组件注册步骤总结

条件注解

 演示示例

属性绑定注解

@ConfigurationProperties进行绑定

@EnableConfigurationProperties进行绑定

其他常用注解

@EnableAutoConfiguration 

 @ComponentScan

@RequestMapping 

@GetMapping

 @PostMapping

@Autowired

 @Resource

@Service

 @Controller 

 @Repository

@ResponseBody 

 @RequestParam

@PathVariable

 @RequestHeader

 @CookieValue

 @RestController

 @Value

@PropertySource

 

组键注册注解

示例:创建两个bean对象

 创建config包下的配置类

@Configuration:声明该类为配置类

@Bean:注册组件注解,默认容器中组件的名字为注册的方法名,也可以@Bean("自定义名称")的方式

@Configuration也可以使用@SpringBootConfiguration代替,两者区别不大。前者代表是通用配置类,后者代表为springboot配置类。主要用来区分实际项目的类型。

 @Component:常用将对象注册到容器中

@Configuration //告诉springboot这是一个配置类
public class AppConfig {@Bean //Bean注册public User user(){var user = new User(); //创建实例对象user.setId(1L);user.setName("张三");return user;}
}

到测试类中测试

@SpringBootApplication
public class Springboot302Application {public static void main(String[] args) {//定义为ioc变量var ioc = SpringApplication.run(Springboot302Application.class, args);//打印输出全部注册的组件名称for (String name : ioc.getBeanDefinitionNames()) {System.out.println(name);}}
}

运行查user对象已成功注册(组件默认是单实例)

 如果需要组件注册为多实例

@Scope("prototype"):调整组件范围,注册组件为多实例,每次获取都会重新创建对象

@Configuration //告诉springboot这是一个配置类
public class AppConfig {@Scope("prototype")@Bean //Bean注册public User user(){var user = new User(); //创建实例对象user.setId(1L);user.setName("张三");return user;}
}

导入第三方包的类注册到ioc容器中

@Import: 给容器中放指定类型的组件,组件的名字默认是全类名

先导入maven依赖

准备将要导入的类对象 

 方法1:可以在配置类中使用@Bean注册到容器中

方法2: 在配置类使用@Import将类导入到ioc容器中

 

 组件注册步骤总结

1、@Configuration 编写一个配置类

2、在配置类中,自定义方法给容器中注册组件。配合@Bean

3、或使用@Import 导入第三方的组件

条件注解

如果注解指定的条件成立,则触发指定行为,通常都是@ConditionalOnXxx的形式 

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

放在方法级别,单独对这个方法进行注解判断。

 

@ConditionalOnClass:如果类路径中存在这个类,则触发指定行为

@ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为

@ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为

@ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为

@ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值

 演示示例

  • 如果存在FastsqlException这个类,给容器中放一个Cat组件,名cat01,
  • 否则,就给容器中放一个Dog组件,名dog01
  • 如果系统中有dog01这个组件,就给容器中放一个 User组件,名zhangsan
  • 否则,就放一个User,名叫lisi

 

属性绑定注解

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

绑定步骤:

  • 1、给容器中注册组件(@Component、@Bean)
  • 2、使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定

 @ConfigurationProperties: 声明组件的属性和配置文件哪些前缀开始项进行绑定。

@EnableConfigurationProperties:快速注册注解,SpringBoot默认只扫描自己主程序所在的包。如果导入第三方包,即使组件上标注了 @Component、@ConfigurationProperties 注解,也没用。因为组件都扫描不进来,此时使用@EnableConfigurationProperties注解就可以快速进行属性绑定并把组件注册进容器。

@ConfigurationProperties进行绑定

创建Dog对象类 

public class Dog {private long id;private String name;private int age;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

将对象属性值写到application.properties配置文件中

dog.id=1
dog.name=柯基
dog.age=2

 在实体类中进行绑定注册

@ConfigurationProperties(prefix = "dog") //声明绑定
@Component //注册到容器中

在主测试程序中测试查看绑定

    public static void main(String[] args) {//定义为ioc变量var ioc = SpringApplication.run(Springboot302Application.class, args);Dog dog = ioc.getBean(Dog.class);System.out.println("dog"+ dog);}

 运行查看已成功绑定

这里出现问号的原因是因为中文编码问题可在设置里设置 

在设置中如果是使用的语言为英文就搜索“file enc”,语言为中文就搜索“文件编码”

 在重新写一下文件重新运行已成功显示

 也可以放在配置类的方法上进行注册绑定

@EnableConfigurationProperties进行绑定

还是使用Dog类为例对象值写到application.properties配置文件中

类中只声明绑定,不注册到容器中

 在配置类中使用@ConfigurationProperties注解 

开启Dog组件的属性绑定,默认会把这个组件自己放到容器中

@EnableConfigurationProperties(Dog.class) 

 运行主测试程序中的代码查看绑定成功

其他常用注解

@EnableAutoConfiguration 

        它的作用是开启Spring Boot的自动配置功能。在Spring Boot应用中,添加这个注解,就可以让Spring Boot自动根据项目中的依赖关系来进行自动配置,无需手动编写大量的配置文件。

@SpringBootApplication
@EnableAutoConfiguration
public class Application {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

 @ComponentScan

        用于自动扫描指定包及其子包下的所有类,并将其注册为Spring容器中的Bean。该注解可以用在@Configuration注解的类中,也可以用在普通的@Component注解的类中。

@Configuration
@ComponentScan(basePackages = "com.springboot")
public class AppConfig {// 配置其他Bean
}

@RequestMapping 

        用于映射 HTTP 请求路径和方法到控制器的方法或类上,也可以用于指定请求参数请求头请求体等信息。

@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping(method = RequestMethod.GET)public String sayHello() {return "hello";}
}

@GetMapping

        用于将HTTP GET请求映射到特定的处理程序方法上,它可以用于处理简单的HTTP GET请求,也可以用于处理带有路径变量的请求。

@RestController
public class MyController {@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}

 @PostMapping

        用于将HTTP POST请求映射到特定的处理方法上,它是@RequestMapping注解的一个变体,用于简化处理POST请求的代码。

@RestController
public class UserController {@PostMappingpublic User createUser(@RequestBody User user) {// 处理创建用户的逻辑return user;}
}

@Autowired

        是Spring框架中的一个注解,用于自动装配Bean。它可以自动将一个Bean注入到另一个Bean中,无需手动编写代码进行依赖注入,Spring会根据类型进行自动装配,如果有多个类型相同的Bean。

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic User getUserById(int id) {return userDao.getUserById(id);}
}@Repository
public class UserDaoImpl implements UserDao {@Overridepublic User getUserById(int id) {// 查询数据库获取用户信息return user;}
}

 @Resource

        是Java EE标准中提供的一种注入依赖对象的方式,它可以自动装配一个指定的bean,从而避免手动实例化对象的繁琐容易出错指定要注入的bean的名称或类型

public class MyClass {@Resource(name = "myBean")private MyBean myBean;@Resourceprivate OtherBean otherBean;
}

@Service

        用于标识一个类为服务层组件。在Spring中,服务层组件通常用于处理业务逻辑,调用数据访问层组件进行数据操作,并将处理结果返回给控制层组件。  该注解可以让Spring自动扫描并创建服务层组件的实例,同时也可以通过依赖注入的方式将服务层组件注入到其他组件中使用。

@Service
public class UserServiceImpl implements UserService {// ...
}

 @Controller 

        用于标识一个类是控制器(Controller)。 控制器是处理用户请求的组件,它接收用户请求,调用业务逻辑处理,最终返回视图给用户。

@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping("/world")public String helloWorld() {return "helloWorld";}
}

 @Repository

        用于标识一个类为数据访问层(DAO)的组件,通常与@Autowired注解一起使用,实现依赖注入。还可以指定一个value属性,用于指定Bean的名称。

@Repository
public class UserDaoImpl implements UserDao {// ...
}@Repository("userDao")
public class UserDaoImpl implements UserDao {// ...
}

 

@ResponseBody 

        是Spring MVC框架中的一个注解,用于将Controller方法返回的对象转换为指定格式的数据,比如JSON、XML等格式,然后将其写入HTTP响应中。

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.createUser(user);return ResponseEntity.ok(savedUser);}@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {User updatedUser = userService.updateUser(id, user);if (updatedUser == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(updatedUser);}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {boolean deleted = userService.deleteUser(id);if (!deleted) {return ResponseEntity.notFound().build();}return ResponseEntity.noContent().build();}
}

 @RequestParam

 是Spring MVC框架中用于绑定请求参数的注解,它可以将请求参数绑定到方法的参数上。

以下属性:

value:请求参数的名称。

required:是否必须,默认为true。

defaultValue:请求参数的默认值。 

在这里插入代码片@Controller
@RequestMapping("/user")
public class UserController {@GetMapping("/info")public String getUserInfo(@RequestParam("id") Long userId, Model model) {// 根据用户ID查询用户信息User user = userService.getUserById(userId);// 将用户信息添加到模型中model.addAttribute("user", user);// 返回用户信息页面return "user/info";}
}

 

@PathVariable

        是Spring MVC框架中用于获取请求路径中的参数值的注解,将请求路径中的占位符参数绑定到方法的参数上,从而方便地获取请求参数。

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {// 根据id查询用户信息User user = userService.getUserById(id);return user;}
}

 @RequestHeader

        用于获取HTTP请求头中的值,可以用在Controller的方法参数上,表示将请求头中指定名称的值注入到方法参数中。

@GetMapping("/user-agent")
public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {return "User-Agent: " + userAgent;
}

 @CookieValue

        是Spring MVC中的一个注解,用于将指定的cookie值绑定到方法的参数上。需要指定两个参数,分别是cookie的名称和默认值。如果指定的cookie不存在,则使用默认值。 

@GetMapping("/user")
public String getUserInfo(@CookieValue(value = "token", defaultValue = "") String token) {// do something with tokenreturn "user";
}

 @RestController

         是@Controller和@ResponseBody的结合体,用于标记一个类是 RESTful 风格的控制器,它的方法返回的数据会直接写入 HTTP 响应体中。

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}

 @Value

         可以用来注入外部配置文件或者动态生成的值,例如数据库连接地址、用户名密码。

public class MyClass {@Value("${database.url}")private String dbUrl;// 或者@Value("#{systemProperties['user.home']}")private String userHome;
}

 

@PropertySource

        是Spring框架中的一个注解,用于指定一个或多个属性文件的位置,以便在应用程序中使用这些属性,在Spring应用程序中轻松地管理属性文件

//application.properties
db.username=root
db.password=123456
db.url=jdbc:mysql://localhost:3306/test
//配置类
@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {// ...
}
@Service
public class UserServiceImpl implements UserService {@Value("${db.username}")private String username;@Value("${db.password}")private String password;@Value("${db.url}")private String url;// ...
}

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

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

相关文章

Objective-C大爆炸:从零到单例模式

oc学习笔记&#xff08;一&#xff09; 文章目录 oc学习笔记&#xff08;一&#xff09;oc与c语言的区别#import的用法foundation框架NSLog函数NSString类型符号的作用oc中的数据类型 类与对象概念&#xff1a; 创建第一个类类的定义类的实现类加载对象的产生和使用 self语法id…

为什么说B端SaaS产品经理需要让研发团队懂业务

先问是不是&#xff0c;再问为什么。这个问题即对也不对。 1.对的地方&#xff1a;研发团队里面的架构师、前后端leader、组长或者骨干如果懂业务的话&#xff0c;就能在做系统业务架构、信息架构和数据架构的时候多一些前瞻性&#xff0c;为后期业务扩展预留一些接口或者能力…

ElasticSearch面试题2

Mapping属性详细介绍/常见的字段数据类型&#xff1a; 映射(mapping)︰mapping是对索引库中文档的约束信息&#xff08;例如字段名、数据类型&#xff09;&#xff0c;类似表的结构约束&#xff1b;每个索引库都应该有自己的映射 数据库一定要先创建表才能去添加数据…

【机器学习】视觉基础模型的三维意识:前沿探索与局限

视觉基础模型的三维意识&#xff1a;前沿探索与局限 一、引言二、视觉基础模型的三维意识三、当前模型的局限性四、实验与结果五、总结与展望 大规模预训练的进展已经产生了具有强大能力的视觉基础模型。最近的模型不仅可以推广到任意图像的训练任务&#xff0c;而且它们的中间…

yo!这里是网络入门初识

目录 前言 基本概念 网络 协议 地址 网络传输流程 OSI七层模型 TCP/IP四层&#xff08;五层&#xff09;模型 流程图 数据封装&&分用 后记 前言 对于上一个专栏——Linux操作系统&#xff0c;我们学习了操作系统的基础知识以及基本的系统编程&#xff0c;其…

Kafka客户端工具:Offset Explorer 使用指南

Kafka作为一个分布式流处理平台&#xff0c;在大数据处理和实时数据流应用中扮演着至关重要的角色。管理Kafka的topics及其offsets对于维护系统稳定性和数据一致性至关重要。Offset Explorer是一个强大的桌面应用程序&#xff0c;它使得管理和监控Kafka集群变得简单直观。本文将…

ffmpeg音视频裁剪

音视频裁剪&#xff0c;通常会依据时间轴为基准&#xff0c;从某个起始点到终止点的音视频截取出来&#xff0c;当然音视频文件中存在多路流&#xff0c;所对每一组流进行裁剪 基础概念&#xff1a; 编码帧的分类&#xff1a; I帧(Intra coded frames): 关键帧&#xff0c;…

xLua热更新解决方案

图中灰色的无法实现热更新&#xff0c;而Lua代码可以打包成AB包&#xff0c;并上传到资源服务器&#xff0c; 当进入游戏检测是否有资源需要更新&#xff0c;需要则会从资源服务器下载。 学习目标 1.导入xLua框架 2.C#调用Lua 3.Lua调用C# 4.xLua热补丁 xLua框架导入和AB…

如何消除浏览器SmartScreen对网站“不安全”提示?

面对互联网时代用户对网站安全性和可信度的严苛要求&#xff0c;网站运营者时常遭遇Microsoft Defender SmartScreen&#xff08;SmartScreen&#xff09;提示网站不安全的困扰。本文将剖析SmartScreen判定网站不安全的原因&#xff0c;并为运营者提供应对策略&#xff0c;以恢…

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier来诊断并预测一个人是否患有自闭症

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

Facebook的声音:听见社交媒体的心跳

社交媒体如今已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的佼佼者&#xff0c;承载着数以亿计的用户的交流、分享和连接。在这个信息爆炸的时代&#xff0c;Facebook的声音就像是社交媒体的心跳&#xff0c;传递着无数个体的情感、思想和生活。本文…

Python-VBA函数之旅-object基类(非函数)

目录 一、object基类的常见应用场景 二、object基类使用注意事项 三、如何用好object基类&#xff1f; 1、object基类&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、object基类的…

基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析

H.264视频流的RTP封装类型分析&#xff1a; 前言&#xff1a; NULL Hearder简介(结构如下)&#xff1a; ---------------|0|1|2|3|4|5|6|7|--------|F|NRI| Type |--------------- F&#xff1a;forbidden_zero_bit&#xff0c; 占1位&#xff0c;在 H.264 规范中规定了这…

CI/CD:基于kubernetes的Gitlab搭建

1. 项目目标 &#xff08;1&#xff09;熟悉使用k8s环境搭建Gitlab &#xff08;2&#xff09;熟练应用Gitlab基本配置 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 k8s-master 10.0.1.1 kube_master k8s-node1 10.0.1.2 kube_node k8s-node2 10.0.1.3 k…

2024年武汉东湖高新水测成绩出来了

本次水测通过人员有1016名&#xff0c;通过的人数还是蛮多的&#xff0c;水测其实没有大家想象的那么难&#xff0c;现在职称评审都是水测线下评审的模式进行的。 水平测试分机考&#xff0c;笔试和面试答辩&#xff0c;各区随机安排选其一&#xff0c;机考就相当于考驾照刷题&…

自动化测试web库(元素定位、元素操作、浏览器操作)

按照谷歌浏览器 Chrome &#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ Chrome使用技巧&#xff1a; 1、找到自己想要的标签 打开检查&#xff0c;点击箭头&#xff0c;再点击你想要点击的地方 2、直接在浏览器上查询&#xff0c;看看是否查询成功 可…

【算法刷题 | 贪心算法08】4.29(划分字母区间、合并区间)

文章目录 14.划分字母区间14.1题目14.2解法&#xff1a;贪心14.2.1贪心思路14.2.2代码实现 15.合并区间15.1题目15.2解法&#xff1a;贪心15.2.1贪心思路15.2.2代码实现 14.划分字母区间 14.1题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一…

msf练习

一、什么是msfvenom&#xff1f; msfvenom是msf中的一个独立的负载生成器&#xff0c;它可以利用msf中的payloads和encoders来生成各种格式的木马文件&#xff0c;并在目标机上执行&#xff0c;配合meterpreter在本地监听上线。msfvenom是msfpayload和msfencode的结合体&#…

【C++】深入了解C++内存管理

个人主页&#xff1a;救赎小恶魔 欢迎大家来到小恶魔频道 好久不见&#xff0c;甚是想念 今天我们要深入讲述类与对象的初始化列表以及隐式类型转换 目录 1.C的内存分布 2.C/C言中动态内存管理方式 1.C语言的管理方式 2.C的管理方式 new delete 3.operator new与ope…