当前位置: 首页 > article >正文

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 {
          @Bean
          public 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")
          @ResponseBody
          public 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.kler.cn/a/412348.html

相关文章:

  • 力扣hot100-->排序
  • 手机无法连接服务器1302什么意思?
  • React表单联动
  • STM32F103外部中断配置
  • 即时通讯服务器被ddos攻击了怎么办?
  • 基于预测反馈的情感分析情境学习
  • SSM之AOP与事务
  • 缓存雪崩、击穿、穿透深度解析与实战应对
  • 使用OpenCV实现视频背景减除与目标检测
  • 【QT】背景,安装和介绍
  • 【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践
  • docker-compose文件的简介及使用
  • Git 使用技巧
  • 鸿蒙开发异步与线程
  • 使用Cmake导入OpenCV库的大坑记录
  • 如何将 GitHub 私有仓库(private)转换为公共仓库(public)
  • 反爬虫机制
  • 【大数据学习 | Spark-SQL】SparkSession对象
  • 从ETL到DataOps:WhaleStudio替代Informatica,实现信创化升级
  • 计算机网络 实验八 应用层相关协议分析
  • 【NOIP普及组】表达式求值
  • 学习threejs,设置envMap环境贴图创建反光效果
  • Qt程序发布及打包成exe安装包
  • 微信小程序首页搜索框的实现教程
  • idea_常用设置
  • RSA算法和AES算法,哪种更安全