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://xiahunao.cn/news/3016560.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

浏览器几种常见的post请求方式 Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认表单数据会编码为 "application/x-www-form-urlencoded" post请求的参数一般放在Body里。 Content-Type&#xff08;内容类型&#xff09;&#xff0c;一般…

25-ESP32-S3 内置的真随机数发生器(RNG)

ESP32-S3 内置的真随机数发生器&#xff08;RNG&#xff09;&#x1f60e; 引言 &#x1f4da; 在许多应用中&#xff0c;随机数发生器&#xff08;RNG&#xff09;是必不可少的。无论是在密码学&#x1f512;、游戏&#x1f3ae;、模拟&#x1f9ea;或其他领域&#xff0c;随…

【第6节课笔记】LagentAgentLego

Lagent 最中间部分的是LLM&#xff0c;即为大语言模型模块&#xff0c;他可以思考planning和调用什么action&#xff0c;再将其转发给动作执行器action executer执行。 支持的工具如下&#xff1a; Arxiv 搜索 Bing 地图 Google 学术搜索 Google 搜索 交互式 IPython 解释器 IP…

6.Nginx

Nginx反向代理 将前端发送的动态请求有Nginx转发到后端服务器 那为何要多一步转发而不直接发送到后端呢&#xff1f; 反向代理的好处&#xff1a; 提高访问速度&#xff08;可以在nginx做缓存&#xff0c;如果请求的是同样的接口地址&#xff0c;这样就不用多次请求后端&#…

【数据结构】C/C++ 带头双向循环链表保姆级教程(图例详解!!)

目录 一、前言 二、链表的分类 &#x1f95d;单链表 &#x1f95d;双链表 &#x1f95d;循环链表 &#x1f95d;带头双向循环链表 &#x1f34d;头节点&#xff08;哨兵位&#xff09;的作用 ✨定义&#xff1a; ✨作用&#xff1a; &#x1f347;总结 三、带头双向循环链表 …

一键解密,网络安全神器现已问世!

一、简介 当前版本V1.1这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功…

Python Dash库:一个Web应用只需几行代码

大家好&#xff0c;在数据科学领域&#xff0c;数据可视化是将数据以图形化形式展示出来&#xff0c;帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash&#xff0c;Dash以其简洁、高效和强大的功能而闻名&#xff0c;它允许开发者快速构建交互式Web应用…

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作&#xff0c;这就容易导致采取了OOD的数据。因此&#xff0c;IQL取消max,&#xff0c;通过一个期望回归算子…

STM32接入CH340芯片的初始化进入升级模式(死机)问题处理

目录 1. 问题描述2. 问题分析2.1 CH340G/K 的初始化波形2.2 第1种USB升级电路2.3 第2种USB升级电路2.4 第3种USB升级电路2.5 第4种USB升级电路 3. 总结 1. 问题描述 我所用的CH340G&#xff08;CH340K也用过&#xff09;接在MCU的电路中&#xff0c;在插入CH340G/K 的接插件&a…

【一刷《剑指Offer》】面试题 16:反转链表

力扣对应题目链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;反转链表_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;链表操作&#xff0c;思维缜密程度。 一、《剑指 Offer》内容 二、分析题目 解题思路&#…

程序员的实用神器:助力软件开发的利器 ️

程序员的实用神器&#xff1a;助力软件开发的利器 &#x1f6e0;️ 程序员的实用神器&#xff1a;助力软件开发的利器 &#x1f6e0;️引言摘要自动化测试工具&#xff1a;保障代码质量的利剑 &#x1f5e1;️编写高效测试用例 持续集成/持续部署工具&#xff1a;加速交付的利器…

Richard 林旅强:说说社区的故事和对 RTE 社区的畅想

各位 RTE 开发者社区的小伙伴们&#xff0c;大家好&#xff1a; 我是 Richard 林旅强&#xff0c;今年起开始担任我们 RTE 社区联合主理人&#xff0c;很荣幸能在这里跟杜金房老师和陈靖老师一起做点事情&#xff0c;为社区的大家服务 &#x1f603; 今天想跟各位分享&#x…

重学SpringBoot3-SPI机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SPI机制 什么是 SPI&#xff1f;Spring Boot 中的 SPI 机制spring.factories 文件自动配置的实现启动流程中的作用 SPI实际应用步骤 1: 新建模块步骤 2:…

[Java EE] 多线程(九):ReentrantLock,Semaphore,CountDownLatch与线程安全的集合类(多线程完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

一文读懂Python的`__init__`,`__init__`方法的终极指南

大家好&#xff0c;今天给大家介绍一个Python中一个特殊的函数__init__。 在Python中&#xff0c;__init__方法是一个特殊的函数&#xff0c;它在创建类的新实例时自动调用。它的作用类似于其他编程语言中的构造函数&#xff0c;用于初始化对象的状态。这篇文章将带你深入了解…

python实现的信号合成分析系统(DSP)

python实现的信号合成分析系统(DSP) 流程 1、在QT界面上设置好信号频率,采样频率,采样点数 2、使用np构建sin函数 3、使用matplotlib画出 4、分别分析合成信号的FFT频域信息1、效果图 2、示例代码 def btn_com_clicked(self):# 信号合成分析Fs = self.com_fs_edit_value #…

【网络编程】http协议

预备知识 什么是http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一个应用层的协议&#xff0c;用于在网络中传输超文本&#xff08;如HTML文档&#xff09;。HTTP协议建立在TCP/IP协议之上&#xff0c;是Web浏览器和Web服务器…

Map集合的实现类~HashMap

存储结构&#xff1a;哈希表 键重复依据是hashCode和equals方法&#xff08;键不能重复&#xff09; 添加&#xff1a; 先创建Student类&#xff0c;那么往HashSet添加的就是Student对象作为键值&#xff0c;后面的作为值 删除&#xff1a; 判断&#xff1a; 遍历&#xff1a…

为什么要梯度累积

文章目录 梯度累积什么是梯度累积如何理解理解梯度累积梯度累积的工作原理 梯度累积的数学原理梯度累积过程如何实现梯度累积 梯度累积的可视化 梯度累积 什么是梯度累积 随着深度学习模型变得越来越复杂&#xff0c;模型的训练通常需要更多的计算资源&#xff0c;特别是在训…

self-attention 的 CUDA 实现及优化 (上)

self-attention 的 CUDA 实现及优化 (上) 导 读 self-attention 是 Transformer 中最关键、最复杂的部分&#xff0c;也是 Transformer 优化的核心环节。理解 self-attention &#xff0c;对于深入理解 Transformer 具有关键作用&#xff0c;本篇主要就围绕 self-attention 展…