java——SpringBoot中常用注解及其底层原理

SpringBoot中的注解是简化配置、自动装配组件和实现声明式服务的关键。以下是对SpringBoot中常用注解及其底层原理的详细解析:

常用注解

  1. @SpringBootApplication

    • 标注在主程序类上,表示这是一个Spring Boot应用的入口。
    • 它是一个复合注解,包括了@Configuration、@EnableAutoConfiguration和@ComponentScan。
      @SpringBootApplication
      public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
      }

  2. @EnableAutoConfiguration

    • 启用Spring Boot的自动配置机制,根据添加的依赖和配置文件自动配置Spring应用。
      @EnableAutoConfiguration
      public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
      }

  3. @Configuration

    • 标识一个类作为配置类,相当于传统的Spring XML配置文件。
    • 可以包含一个或多个@Bean方法。
      @Configuration
      public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
      }

  4. @ComponentScan

    • 指定要扫描的包,以便发现和注册Spring组件。
    • 默认情况下,扫描主应用类所在的包及其子包。
      @ComponentScan(basePackages = "com.example")
      public class MyApplication {
      }

  5. @Component

    • 将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。
    • 通用注解,适用于任何层次的组件。
      @Component
      public class MyComponent {
      }

  6. @Service

    • 标识服务层组件,实际上是@Component的一个特化,用于表示业务逻辑服务。
      @Service
      public class MyService {
      }

  7. @Repository

    • 标识持久层组件(dao层),实际上是@Component的一个特化,用于表示数据访问组件。
    • 常用于与数据库交互。
      @Repository
      public class MyRepository {
      }

  8. @Controller

    • 标识控制层组件,实际上是@Component的一个特化,用于表示Web控制器。
    • 处理HTTP请求并返回视图或响应数据。
      @Controller
      public class MyController {
      }

  9. @RestController

    • 标识RESTful Web服务的控制器,实际上是@Controller和@ResponseBody的结合。
    • 返回的对象会自动序列化为JSON或XML,并写入HTTP响应体中。
      @RestController
      public class MyRestController {
      }

  10. @RequestMapping

    • 映射HTTP请求到处理方法上(支持GET、POST、PUT、DELETE等)。
      @Controller
      public class MyController {@RequestMapping("/hello")public String sayHello() {return "hello";}
      }

  11. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping

    • 映射HTTP请求到处理方法上,是@RequestMapping的简化版本。
      @RestController
      public class MyRestController {
      /*
      @GetMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.GET)
      @PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)
      @PutMapping("/users/{userId}") 等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
      */
      @DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)@GetMapping("/users")public List<User> getUsers() {return userService.getAllUsers();}
      }

  12. @ResponseBody

    • 将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。
    • 常用于RESTful服务中。
      @RestController
      public class MyRestController {@GetMapping("/hello")@ResponseBodypublic String sayHello() {return "Hello, World!";}
      }

  13. @RequestBody

    • 将HTTP请求体的内容(如JSON、XML)转换为Java对象。
    • 常用于接收前端传递的数据。
      @RestController
      public class MyRestController {@PostMapping("/users")public User createUser(@RequestBody User user) {return userService.createUser(user);}
      }

  14. @Autowired

    • 用于自动注入依赖对象。
      @Autowired
      @Qualifier("baseDao")
      private BaseDao baseDao;

  15. @Qualifier

    • 用于指定注入特定名称的bean。

底层原理

  • 自动配置:Spring Boot 自动配置的核心在于 @EnableAutoConfiguration。它利用了 Spring 的条件化配置机制(@Conditional),结合 spring.factories 文件中定义的自动配置类列表,根据类路径中是否存在某些特定的类、环境变量等条件来决定是否应用某个配置。

  • 组件扫描@ComponentScan 注解使得 Spring 能够在指定的包路径下查找带有 @Component, @Service, @Repository, @Controller 等注解的类,并将它们注册为 Spring Bean。

  • 依赖注入@Autowired 注解的背后是 Spring 的依赖注入机制。Spring 使用反射技术来识别需要注入的字段、构造函数或方法,并从容器中获取合适的 Bean 来完成注入。

  • 条件化配置@Conditional 及其子注解(如 @ConditionalOnProperty)允许开发者根据特定条件来选择性地激活配置。这使得同一个应用可以根据不同的运行环境(如开发、测试、生产)加载不同的配置。

  • 属性绑定:Spring Boot 支持通过 application.propertiesapplication.yml 文件来配置应用属性。这些属性可以通过 @Value 注解直接注入到 Bean 中,或者通过 @ConfigurationProperties 注解与 Java 类绑定,从而实现更复杂的配置管理。

总之,SpringBoot中的注解和自动配置机制大大简化了Spring应用的开发过程。通过理解这些注解的底层原理,可以更好地掌握SpringBoot的开发技巧并提高工作效率。

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

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

相关文章

OceanBase 大数据量导入(obloader)

现需要将源数据库&#xff08;Oracle|MySQL等&#xff09;一些表的海量数据迁移到目标数据库 OceanBase 中&#xff0c;基于常规 jdbc 驱动编码的方式涉及开发工作&#xff0c;性能效率也要看编码的处理机制。 OceanBase 官方提供了的 OceanBase Migration Service (OMS) 数据…

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的编程之参数传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…

【详细介绍及演示】Flink之checkpoint检查点的使用

目录 一、介绍 二、 设置checkpoint检查点演示 1、 代码演示 2、测试代码效果 3、查看快照情况 ​编辑 三、在集群上运行 1、第一次运行 2、第二次运行 四、自定义检查点savePoint 1、提交一个flink job 打成jar包 2、输入一些数据&#xff0c;观察单词对应的数字的…

JAVA篇05 —— 内部类(Local、Anonymous、Member、Static)

欢迎来到我的主页&#xff1a;【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助&#xff0c;希望点赞收藏加关注啦~ 目录 1 内部类Inner Class 1.1 局部内部类 1.2 匿名内部类&#xff08;※※&#xff09; 1.3 匿名类最佳实践&#xf…

Spring Boot 与 Spring Cloud Alibaba 版本兼容对照

版本选择要点 Spring Boot 3.x 与 Spring Cloud Alibaba 2022.0.x Spring Boot 3.x 基于 Jakarta EE&#xff0c;javax.* 更换为 jakarta.*。 需要使用 Spring Cloud 2022.0.x 和 Spring Cloud Alibaba 2022.0.x。 Alibaba 2022.0.x 对 Spring Boot 3.x 的支持在其发行说明中…

jsp的pageContext对象

jsp的pageContext对象 是页面的上下文对象&#xff0c;表示当前页面运行环境&#xff0c;用于获取当前页面jsp页面信息&#xff0c;作用范围为当前的jsp页面 pageContext对象可以访问当前页面的所有jsp内置对象 jsp的四种内置对象 4中作用域&#xff1a;pagecontext,request…

网络安全在数字时代保护库存数据中的作用

如今&#xff0c;通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而&#xff0c;技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要&#xff0c;而且必不可少。 了解网络安全及其…

Python图像处理:打造平滑液化效果动画

液化动画中的强度变化是通过在每一帧中逐渐调整液化效果的强度参数来实现的。在提供的代码示例中&#xff0c;强度变化是通过一个简单的线性插值方法来控制的&#xff0c;即随着动画帧数的增加&#xff0c;液化效果的强度也逐渐增加。 def liquify_image(image, center, radius…

day2全局注册

全局注册代码&#xff1a; //文件核心作用&#xff1a;导入App.vue,基于App.vue创建结构渲染index.htmlimport Vue from vue import App from ./App.vue //编写导入的代码&#xff0c;往代码的顶部编写&#xff08;规范&#xff09; import HmButton from ./components/Hm-But…

wireshark基础

免责声明&#xff1a; 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;https://longyusec.com/ 泷羽sec B站地址&#xff1a;https:/…

学习笔记037——Java中【Synchronized锁】

文章目录 1、修饰方法1.1、静态方法&#xff0c;锁定的是类1.2、非静态方法&#xff0c;锁定的是方法的调用者&#xff08;对象&#xff09; 2、修饰代码块&#xff0c;锁定的是传入的对象2.1、没有锁之前&#xff1a;2.2、有锁后&#xff1a; 实现线程同步&#xff0c;让多个线…

⭐️ GitHub Star 数量前十的工作流项目

文章开始前&#xff0c;我们先做个小调查&#xff1a;在日常工作中&#xff0c;你会使用自动化工作流工具吗&#xff1f;&#x1f64b; 事实上&#xff0c;工作流工具已经变成了提升效率的关键。其实在此之前我们已经写过一篇博客&#xff0c;跟大家分享五个好用的工作流工具。…

智能桥梁安全运行监测系统守护桥梁安全卫士

一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分&#xff0c;其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道&#xff0c;更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行&#xff0c;桥梁安…

[创业之路-155] :《领先的密码-BLM方法论全面解读与应用指南》- 综合管理框架

目录 一、BLM&#xff08;业务领先模型&#xff09;综合管理框架 1、BLM模型的起源与发展 2、BLM模型的核心组成 3、BLM模型的战略规划与执行流程 4、BLM模型的应用价值 二、BLM&#xff08;业务领先模型&#xff09;实施案例 1. 华为的实施案例 2. 某知名企业A的实施案…

用Java爬虫“搜刮”工厂数据:一场数据的寻宝之旅

引言&#xff1a;数据的宝藏 在这个数字化的时代&#xff0c;数据就像是隐藏在数字丛林中的宝藏&#xff0c;等待着勇敢的探险家去发掘。而我们&#xff0c;就是那些手持Java魔杖的现代海盗&#xff0c;准备用我们的爬虫船去征服那些数据的海洋。今天&#xff0c;我们将一起踏…

redis 底层数据结构

概述 Redis 6 和 Redis 7 之间对比&#xff1a; Redis6 和 Redis7 最大的区别就在于 Redis7 已经用 listpack 替代了 ziplist. 以下是基于 Redis 7基础分析。 RedisObject Redis是⼀个<k,v>型的数据库&#xff0c;其中key通常都是string类型的字符串对象&#xff0c;⽽…

UE5 实现组合键触发事件的方法

因为工作原因。 需要用大括号{和}来触发事件 但是在蓝图中搜了一下&#xff0c;发现键盘事件里根本就没有{}这两个键。 花费了一下午&#xff0c;终于找到解决的方法了&#xff0c;也就是增强输入的弦操作 首先创建一个项目 纯蓝图或者C都可行 进入到内容浏览器的默认页面 …

使用Github Action将Docker镜像转存到阿里云私有仓库,供国内服务器使用,免费易用

文章目录 一、前言二、 工具准备&#xff1a;三、最终效果示例四、具体步骤第一大部分是配置阿里云1. 首先登录阿里云容器镜像服务 [服务地址](https://cr.console.aliyun.com/cn-hangzhou/instances)2. 选择个人版本3. 创建 命名空间4. 进入访问凭证来查看&#xff0c;用户名字…

用两个栈实现队列 剑指offer

题目描述 用两个栈实现一个队列。队列声明如下图&#xff0c;请实现它的两个函数appendTail和deleteHead,分别完成在队尾插入节点和队头删除节点的功能。 代码实现 测试用例 相关题目

本地推流,服务器拉流全流程

本地推流&#xff0c;服务器拉流全流程 环境准备&#xff1a;准备一台服务器&#xff0c;其中openssl最好为1.1.1版本&#xff08;可以直接使用ubuntu20.04操作系统&#xff09; 服务器拉流 1、 安装环境依赖 sudo apt-get update sudo apt-get install unzip sudo apt-get…