SpringBoot注解大全(超详细)

2023-11-12

一、启动注解(Spring Boot 应用的入口注解)@SpringBootApplication

@SpringBootApplication 是一个注解,它是 Spring Boot 应用的入口注解,用于表示一个应用程序的主类。这个注解通常被放置在包含 main() 方法的类上。@SpringBootApplication 是一个组合注解,整合了以下三个注解的功能:

1.1 @SpringBootConfiguration:

        标记该类是一个配置类,其中可能包含用 @Bean 注解标记的方法,用于定义 Bean 对象。

1.2 @EnableAutoConfiguration

        通过启用 Spring Boot 的自动配置机制,根据项目的依赖和配置信息来自动配置应用程序。

1.3 @ComponentScan

        扫描指定包及其子包下的组件(包括 @Component@Service@Repository 等注解标记的类),将它们注册为 Spring 的组件。

这个组合注解简化了 Spring Boot 应用的配置,可以减少开发者的工作量。通常情况下,我们将 @SpringBootApplication 注解放置在项目的主类上。

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

@SpringBootApplication详细可参考------> @SpringBootApplication详解_Maiko Star的博客-CSDN博客

二、配置文件相关注解

2.1 @Configuration:  

   @Configuration 是 Spring Framework 中的一个注解,用于标记一个类为配置类。配置类是一种特殊的类,它用于定义 Bean 对象以及其他配置信息。

        在使用 @Configuration 注解标记的类中,我们可以使用 @Bean 注解来定义方法,这些方法会在 Spring 容器初始化时被调用,并且返回一个对象作为 Bean。

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

        在上述示例中,AppConfig 类被标记为配置类,使用 @Bean 注解定义了一个方法 userService(),该方法将返回一个 UserService 对象作为 Bean。Spring 容器在初始化时将会调用 userService() 方法并将其返回的对象注册为一个 Bean,可以在其他地方进行依赖注入。

        除了 @Bean 注解,@Configuration 类中还可以使用其他 Spring 注解,例如 @Value@Autowired 等,以实现更复杂的配置和依赖注入逻辑。

 关于@Configuration的更多内容参考 -----> 底层注解-@Configuration详解 & @Configuration(proxyBeanMethods = true/false)_Maiko Star的博客-CSDN博客

 2.2 @ComponentScan

   @ComponentScan 是 Spring Framework 中的一个注解,用于指定需要被 Spring 扫描并加入到应用上下文的组件。该注解可以用在配置类上或者作为单独的注解使用。

        当 @ComponentScan 注解用在配置类上时,它会告诉 Spring 在指定的包及其子包下扫描注解标记的类,并将它们注册为 Spring 的组件(如 @Component@Service@Repository 等)。

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    // 配置类的其他内容...
}

 上述示例中,@ComponentScan 注解指定了扫描的包路径为 “com.example”,Spring 将会在该包及其子包下扫描并注册所有标记为组件的类。

三、注入bean相关注解

3.1 @Bean

   @Bean 是 Spring Framework 中的一个注解,用于告诉 Spring 容器将被注解标记的方法的返回值作为一个 Bean 注册到容器中。

        通常情况下,我们需要在 Spring 容器中创建和管理对象。通过 @Bean 注解,我们可以自定义方法来返回或创建这些对象,并将它们注册为 Spring 的 Bean,使得它们可以在其他地方进行依赖注入、使用和管理。

示例:

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

在上述示例中,@Bean 注解标记了 userService() 方法,该方法返回一个 UserService 对象。当 Spring 容器初始化时,会调用 userService() 方法,并将其返回的对象注册为一个 Bean。这样,在其他需要使用 UserService 的地方,可以通过依赖注入的方式获取该 Bean 的实例,并使用它提供的服务。

除了简单的方法返回对象,@Bean 注解还支持更复杂的配置:

  • 可以通过 name 属性指定 Bean 的名称,例如 @Bean(name = "myBean")
  • 可以通过 initMethod 属性指定在实例化 Bean 之后调用的初始化方法,例如 @Bean(initMethod = "init")
  • 可以通过 destroyMethod 属性指定在销毁 Bean 之前调用的销毁方法,例如 @Bean(destroyMethod = "cleanup")
  • 可以通过 @Scope 注解指定 Bean 的作用域,如单例(@Scope("singleton"))、原型(@Scope("prototype"))等。

3.2  @Component、@Repository、@Service、@Controller

3.2.1 @Component

  @Component 是最基本的注解,用于将一个普通的类标记为 Spring 的组件。它是其他三个注解的父注解。通常用于标记一般性的业务逻辑类。

@Component
public class UserService {
    // 类的实现...
}

3.2.2 @Repository

  @Repository 用于标记数据访问对象(DAO),通常用于与数据库交互的类。它是对 @Component 的特化,用于提供更具体的语义。

@Repository
public class UserRepositoryDao {
    // 数据访问的实现...
}

3.2.3 @Service

  @Service 用于标记服务类,通常用于业务逻辑的处理和组装。它是对 @Component 的特化,提供了更具体的语义。

@Service
public class UserService {
    // 服务类的实现...
}

3.2.4 @Controller

  @Controller 用于标记控制器类,通常用于 Web 应用程序中处理用户请求和返回响应。它是对 @Component 的特化,用于提供更具体的语义。

@Controller
public class UserController {
    // 控制器类的实现...
}

这些注解的作用类似,都是用来将类标记为 Spring 组件,使其被 Spring 容器扫描和管理。使用它们的好处是可以使代码更加清晰和易读,并在代码层面表示出组件的角色和职责。在使用时,根据类的具体功能和用途选择合适的注解来标记类。同时,这些注解也可以与其他注解结合使用,实现更复杂的功能和特性。

3.3 @Scope

  • @Scope在和@Component注解一起修饰在类上,作为类级别注解时,@Scope表示该类实例的范围

  • 在和@Bean一起修饰在方法上,作为方法级别注解时,@Scope表示该方法返回的实例的范围。

常见的作用域范围包括:

  1. singleton(默认):单例作用域,每个容器中只存在一个共享的 Bean 实例。
  2. prototype:原型作用域,每次请求/获取 Bean 时都会创建一个新的实例。
  3. request:请求作用域,每次 HTTP 请求都会创建一个新的 Bean 实例。
  4. session:会话作用域,每个用户会话都会创建一个新的 Bean 实例。
  5. application:应用作用域,整个应用程序生命周期内只有一个 Bean 实例。
  6. websocket:WebSocket 作用域,每个 WebSocket 连接都会创建一个新的 Bean 实例。
@Component
@Scope("prototype")
public class MyService {
    // 类的实现...
}

 在上述示例中,MyService 类被标记为一个组件,并使用 @Scope("prototype") 注解将该组件的作用域设置为原型模式,每次通过容器获取 MyService 的实例时都会创建一个新的对象。

3.4 @Autowired

     通过 @Autowired 注解,我们可以自动将 Spring 容器中匹配类型的 Bean 注入到目标对象中,避免了手动处理依赖对象的创建和管理,提高了代码的可维护性和可测试性。

四、SpringMVC相关注解

4.1 @RestController 复合注解

  @RestController 是一个复合注解,它是在 Spring Framework中对 @Controller 和 @ResponseBody 进行了整合的注解。@Controller 注解用于标记类为控制器,表示该类是一个处理用户请求的控制器。而 @ResponseBody 注解用于标记方法返回的结果作为响应体返回给客户端。

  @RestController 注解默认将方法返回的对象转换为 JSON 或 XML 格式,并作为响应体返回给客户端。

4.2 @RequestMapping

@RequestMapping 是 Spring Framework 中的一个注解,用于映射请求的 URL 路径到控制器类或方法上。

通过 @RequestMapping 注解,我们可以定义控制器类或方法处理的请求 URL,以及与之关联的 HTTP 请求方法、请求参数、请求头等条件。

@RequestMapping 注解可以应用于类级别和方法级别。

在类级别上,@RequestMapping 注解用于定义控制器类处理的根路径。

4.3 @RequestBody

        通过 @RequestBody 注解,我们可以将请求体中的数据自动绑定到控制器方法的参数上,从而方便地获取请求中发送的数据。数据绑定的方式通常是根据请求体的内容类型(如 JSON、XML 等)进行自动转换,并将转换后的对象作为方法的参数传入。

        注解实现接收http请求体的内容类型(如 JSON、XML 等),将json数据转换为java对象

4.4 @ResponseBody 

  @ResponseBody 是 Spring Framework 中的一个注解,用于将方法的返回值直接作为响应体返回给客户端。

     通过 @ResponseBody 注解,我们可以在控制器方法中将方法的返回值转换为合适的格式(如 JSON、XML 等),并将其作为响应体返回给客户端。

     将返回对象转化为合适的格式(如 JSON、XML 等)响应给客户端

4.5  @RequestParam 

@RequestParam 是 Spring Framework 中的一个注解,用于从请求参数中获取值并绑定到方法参数上。

通过 @RequestParam 注解,我们可以将请求中的参数值自动绑定到控制器方法的参数上,方便地获取请求中传递的参数值。

@RequestParam 注解可以应用于方法参数上。

示例:

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }

    // ...
}

在上述示例中,hello() 方法的参数 name 被标注了 @RequestParam(“name”) 注解,表示从请求参数中获取名为 “name” 的值,并将其绑定到 name 参数上。

@RequestParam 注解还支持一些属性,如 required、defaultValue 等:

  • required:指定参数是否是必需的,默认为 true。如果设置为 true,但请求中没有对应的参数值,会抛出异常;如果设置为 false,但请求中没有对应的参数值,方法参数会被赋予 null。
  • defaultValue:指定参数的默认值。如果请求中没有该参数,会使用 defaultValue 指定的值。

4.6  @PathVariable 

通过 @PathVariable 注解,我们可以在控制器方法中提取 URL 路径中的变量,并将其值绑定到方法参数上,以便进一步处理。

@PathVariable 注解可以应用于方法参数上。

示例:

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable("id") Long userId) {
        // 根据用户 ID 查询用户信息
        // ...
    }

    // ...
}

在上述示例中,getUser() 方法使用了 @PathVariable 注解,参数 userId 将会自动绑定到路径中的 id 变量上。例如,当请求的 URL 为 /api/users/123 时,userId 的值将被设置为 123

@PathVariable 注解还支持一些属性,如 required

  • required:指定该路径变量是否是必需的,默认为 true。如果设置为 true,但请求的 URL 中不包含对应的路径变量,会抛出异常;如果设置为 false,但请求的 URL 中不包含对应的路径变量,方法参数会被赋予 null

4.7  @RequestHeader 

通过 @RequestHeader 注解,我们可以在控制器方法中提取请求头中的特定字段值,并将其绑定到方法参数上,以便进一步处理。

@RequestHeader 注解可以应用于方法参数上。

示例:

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello(@RequestHeader("User-Agent") String userAgent) {
        return "Hello! Your User-Agent is: " + userAgent;
    }

    // ...
}

在上述示例中,hello() 方法使用了 @RequestHeader 注解,参数 userAgent 将会自动绑定到请求头中的 User-Agent 字段的值上。

五、导入相关注解

5.1 @ImportResource导入配置文件注解

通过 @ImportResource 注解,我们可以在使用纯注解驱动的 Spring 应用程序中,引入传统的基于 XML 的配置文件。

@ImportResource 注解可以应用于配置类上。

示例:

@Configuration
@ImportResource("classpath:applicationContext.xml")
public class AppConfig {
   // 配置类的相关代码
}

在上述示例中,@ImportResource 注解引入了名为 applicationContext.xml 的配置文件,该配置文件位于类路径下。

可以导入单个或多个 XML 配置文件,多个文件之间用逗号分隔。

示例:

@Configuration
@ImportResource({"classpath:applicationContext.xml", "classpath:otherContext.xml"})
public class AppConfig {
   // 配置类的相关代码
}

5.2 @Import导入组件注解

通过 @Import 注解,我们可以将其他的 Java 类或配置类导入到当前的配置类中,以便让 Spring 容器识别并管理这些组件。

@Import 注解可以应用于配置类上。

示例:

@Configuration
@Import({BeanA.class, BeanB.class})
public class AppConfig {
   // 配置类的相关代码
}

在上述示例中,@Import 注解引入了 BeanA 类和 BeanB 类,这两个类会被纳入到当前的配置类 AppConfig 所管理的 Spring 容器中。

可以导入单个或多个组件类,多个类之间用逗号分隔。

除了导入普通的组件类,@Import 注解还支持导入其他的配置类。

示例:

@Configuration
@Import({BeanA.class, BeanB.class, AnotherConfig.class})
public class AppConfig {
   // 配置类的相关代码
}

在上述示例中,@Import 注解除了导入 BeanA 类和 BeanB 类外,还导入了另一个配置类 AnotherConfig。这样,AppConfig 所管理的 Spring 容器中既有 BeanA 和 BeanB 组件,同时也会应用 AnotherConfig 所包含的配置信息。

通过 @Import 注解导入的组件会与当前的配置类一起被纳入到 Spring 容器中,并进行相应的管理和使用。

5.3  @PropertySource注解

引入单个properties文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties"})

引入多个properties文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"}) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot注解大全(超详细) 的相关文章

随机推荐

  • 官方AI语音系统电销机器人系统搭建

    端是VUE后端是java还有CC 4台服务器组成nginx kafka mysql数据库 fs 支持大并发 通话录音存储七牛云可以自定义录音存储时长不用担心录音多影响系统硬盘存储空间可自定义删除录音存留时间 市面上的都是单服务器然后加挂大数
  • 以太坊智能合约教程(一)搭建以太坊私有链搭建

    环境说明 win10 64位 geth1 6 5 1 安装geth 安装完成以后 先创建2个账号 geth account new 然后建立 mygenesis json nonce 0x0000000000000042 difficult
  • 更改SVN的用户名、密码等信息的两种方式

    一 背景 在刚入职一家公司的时候 经常会去安装一些版本管理工具 例如 git或者svn 下面就拿svn来举例 假如你拿到的电脑是上位同事留下的 里面的记录并没有被完全清空 当你安装好svn 大概率还是会使用上一位同事的配置文件 那在此之后你
  • Verilog HDL FPGA 从入门到放弃(1)

    这是一篇入门文章 笔者也曾经迷茫过 也很困惑过 硬件编程是怎么样的 但是功夫不负有心人 希望我的文章获得读者的认同 谦虚使人进步 希望不足之处请提意见 对于有意思的东西大家可以探讨一下 硬件编程verilog 建模 一个简单的模型 流水灯的
  • 使用Spring Boot和EasyExcel的导入导出

    在当今信息化社会 数据的导入和导出在各种业务场景中变得越来越重要 为了满足复杂的导入导出需求 结合Java编程语言 Spring Boot框架以及EasyExcel库 我们可以轻松地构建出强大而灵活的数据处理系统 本文将引导您通过一个案例学
  • Odoo(OpenERP)补货规则笔记整理 - 草稿

    感谢Jeffery Jason ccdos roson 等人分享讨论 推式规则 移库规则 从一个库位推送到另一个库位 拉式规则 补货规则 包括生产 采购 移动 进行仓库设置时 会自动创建默认的拉式规则 最小库存规则 再订货规则 补货 某个库
  • iphone 服务器未响应,iPhone 死机没反应?先试试这些方法!

    iPhone 突然死机了 相信很多果粉都遇过这种情况 通常在手机死机的时候 无论我们怎么点屏幕都没反应 如果在一些紧急情况下发生死机 是很头疼的一件事 那么 iPhone 死机没反应 我们到底应该怎么处理呢 今天 疯师傅教你们三招 自己在家
  • 静态类型

    从程序运行或者二进制的角度 或者说 运行时 的角度来看 静态类型就是 没有类型 因为程序实际上不在运行时保存任何的静态类型 这也是静态类型又被称为 编译时类型 的原因 因为一旦经过编译 静态类型系统就基本上消失殆尽了 为什么又说基本上了呢
  • freemarker+itext5实现用模板方式,导出word和pdf(spring-boot直接可使用)

    第一步 需要引入的jar包
  • PHP$_FILES原生图片上传

    PHP FILES原生图片上传 if empty FILES file name header Content type text html charset utf 8 if FILES file error 0 判断上传是否正确 file
  • 接口自动化测试框架-Python+Requests+Yaml

    零代码极限封装的 接口自动化测试框架 目前已经完全能够实现真正的零代码落地并在企业中推广 其中用到的最核心的封装技术如下 核心技术 1 热加载封装 是全网最早应用于自动化测试框架的封装技术 2 Requests统一请求封装 3 接口关联封装
  • windows下Qt、MinGW、libmodbus源码方式的移植与使用

    windows下Qt MinGW libmodbus源码方式的移植与使用 1 前言 libmodbus官网 https libmodbus org github下载 https github com stephane libmodbus 截
  • element-ui 源码解析,你知道 v-loading 是如何实现的吗?

    前言 相信大家肯定都用过 element ui 里面的 v loading 来写加载 但是如果让你来写一个的话你会怎么写呢 众所周知 element ui 框架的 v loading 有两种使用方式 一种是在需要 loading 的标签上直
  • Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)

    本文介绍了如何搭建yolov5目标检测代码的环境 详细记录了python虚拟环境 安装pytorch 加载yolov5项目以及运行检测程序的全过程 完成了本文的yolov5项目搭建后 可以查看本文下一篇文章 使用yolov5训练自己的数据集
  • chown、chmod详解

    首先通过ll命令查看目录下文件 主要看最前面一列 我把 drwxr xr x 拿出来说 d 目录 文件类型 rwx 可读 可写 可执行 2 4位 所属者权限 r x 可读 可执行 5 7位 所属组权限 r x 可读 可执行 8 10位 其它
  • OpenTK---空间中单个三维点的绘制

    OpenTK是一个跨平台的包 可以让我们能够使用C 来调用OpenGL来进行三维可视化的开发 因为这是第一篇 所以会写的比较详细 后面重复用到的内容就不再二次说明了 创建主程序中的类 using OpenTK Mathematics usi
  • 关于iptables禁止全部ip访问问题

    关于iptables禁止全部ip访问问题 旁边兄弟在iptables想要实现任何ip禁止访问 只开发个别端口供个别ip访问 开放ip端口 A INPUT s 192 168 1 1 p tcp dport 8848 j ACCEPT A I
  • C++学习(四十一)stderr stdout

    stdout 标准输出设备 stderr 标准错误输出设备 两者默认向屏幕输出 但如果用转向标准输出到磁盘文件 则可看出两者区别 stdout输出到磁盘文件 stderr在屏幕 在默认情况下 stdout是行缓冲的 他的输出会放在一个buf
  • 双向链表为何时间复杂度为O(1)?

    双向链表相比于单向链表 所谓的O 1 是指删除 插入操作 单向链表要删除某一节点时 必须要先通过遍历的方式找到前驱节点 通过待删除节点序号或按值查找 若仅仅知道待删除节点 是不能知道前驱节点的 故单链表的增删操作复杂度为O n 双链表 双向
  • SpringBoot注解大全(超详细)

    一 启动注解 Spring Boot 应用的入口注解 SpringBootApplication SpringBootApplication 是一个注解 它是 Spring Boot 应用的入口注解 用于表示一个应用程序的主类 这个注解通常