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

SpringSpringBoot常用注解总结

Spring Boot注解主要用于简化配置、自动装配组件和实现声明式服务。以下是详细的介绍:

1、Springboot注解

核心注解

1.@SpringBootApplication
  • 作用: 标注一个主程序类,表明这是一个Spring Boot应用程序的入口。
  • 功能: 这是一个复合注解,组合了@Configuration@EnableAutoConfiguration@ComponentScan
    • @Configuration: 标识一个类作为配置类,类似于Spring XML配置文件。
    • @EnableAutoConfiguration: 启用Spring Boot的自动配置机制,根据项目中的依赖和应用上下文自动配置Spring应用程序。
    • @ComponentScan: 自动扫描指定包及其子包中的Spring组件。
  • 示例:
    @SpringBootApplication
    public class MyApplication {
    public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
    }
    }

自动配置注解

2.@EnableAutoConfiguration
  • 作用: 启用Spring Boot的自动配置机制,根据项目中的依赖和应用上下文自动配置Spring应用程序。
  • 细节: 它会尝试根据添加的依赖和项目中的配置自动配置Spring Bean。例如,如果项目中有HSQLDB的依赖,Spring Boot会自动配置一个内存数据库。
  • 示例:
    @EnableAutoConfiguration
    public class MyApplication {
    public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
    }
    }
3.@Configuration
  • 作用: 标注一个类作为配置类,相当于一个Spring XML配置文件。
  • 细节: 配置类可以包含一个或多个@Bean注解的方法,这些方法会返回要注册到Spring应用上下文中的Bean。
  • 示例:
    @Configuration
    public class AppConfig {
    @Bean
    public MyService myService() {
    return new MyServiceImpl();
    }
    }

组件扫描和注入注解

4.@ComponentScan
  • 作用: 指定要扫描的包,以便发现和注册Spring组件。
  • 细节: 默认情况下,@ComponentScan会扫描主应用类所在的包及其子包。
  • 示例:
    @ComponentScan(basePackages = "com.example")
    public class MyApplication {
    }
5.@Component
  • 作用: 将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。
  • 细节:@Component是一个通用的注解,可以用来标注任何Spring管理的Bean。
  • 示例:
    @Component
    public class MyComponent {
    }
6.@Service
  • 作用: 标识服务层组件,实际上是@Component的一个特化,用于表示业务逻辑服务。
  • 细节: 用于标识服务层的类,这些类通常包含业务逻辑。
  • 示例:
    @Service
    public class MyService {
    }
7.@Repository
  • 作用: 标识持久层组件,实际上是@Component的一个特化,用于表示数据访问组件

数据访问组件(Data Access Component)通常是指在软件系统中负责数据访问和持久化的部分或模块。在典型的企业应用程序中,数据访问组件通常涉及与数据库交互、执行数据操作(如增删改查)、数据转换和持久化等任务。

  • 示例:
    @Repository
    public class MyRepository {
    }
8.@Controller
  • 作用: 标识控制层组件,实际上是@Component的一个特化,用于表示Web控制器。
  • 细节: 用于标识Spring MVC控制器,处理Web请求并返回视图。
  • 示例:
    @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
  • 作用: 映射HTTP GET请求到处理方法上。
  • 示例:
    @RestController
    public class MyRestController {
    @GetMapping("/users")
    public List<User> getUsers() {
    return userService.getAllUsers();
    }
    }
12.@PostMapping
  • 作用: 映射HTTP POST请求到处理方法上。
  • 示例:
    @RestController
    public class MyRestController {
    @PostMapping("/users")
    public User
13.@ResponseBody
  • 作用: 将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。
  • 细节: 常用于RESTful服务中,标识方法返回的对象不是视图名称,而是直接写入HTTP响应体中的数据。
  • 示例:
    @RestController
    public class MyRestController {
    @GetMapping("/hello")
    @ResponseBody
    public String sayHello() {
    return "Hello, World!";
    }
    }
14.@RequestBody
  • 作用: 将HTTP请求体的内容(如JSON、XML等)映射到一个Java对象。
  • 细节: 通常用于POST请求中,将客户端发送的数据绑定到方法的参数上。
  • 示例:
    @RestController
    public class MyRestController {
    @PostMapping("/users")
    public ResponseEntity<String> addUser(@RequestBody User user) {
    // 处理用户添加逻辑
    return ResponseEntity.ok("User added successfully");
    }
    }
15.@PathVariable
  • 作用: 从URI路径中提取参数值,将其映射到方法的参数上。
  • 细节: 常用于RESTful服务中,允许动态地将URL中的部分作为方法参数使用。
  • 示例:
    @RestController
    public class MyRestController {
    @GetMapping("/users/{userId}")
    public ResponseEntity<User> getUserById(@PathVariable Long userId) {
    // 根据userId查询用户信息
    User user = userService.getUserById(userId);
    return ResponseEntity.ok(user);
    }
    }
16.@RequestParam
  • 作用: 用于从请求中获取参数的值。
  • 细节: 可以指定参数的默认值,是否必需等属性。适用于处理查询参数或表单数据。
  • 示例:
    @RestController
    public class MyRestController {
    @GetMapping("/users")
    public ResponseEntity<User> getUserByName(@RequestParam String username) {
    // 根据用户名查询用户信息
    User user = userService.getUserByUsername(username);
    return ResponseEntity.ok(user);
    }
    }

这些注解是Spring MVC和Spring Boot中常用的数据绑定和处理注解,帮助开发者更方便地处理HTTP请求和响应,实现灵活的接口设计和数据交互。

数据访问注解

17.@Entity
  • 作用: 标识一个JPA实体。
  • 细节: 用于定义一个与数据库表映射的持久化类。
  • 示例:
    @Entity
    public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    }
18.@Table
  • 作用: 指定实体对应的数据库表名称。
  • 细节: 如果类名与数据库表名不同,可以使用@Table注解进行指定。
  • 示例:
    @Entity
    @Table(name = "users")
    public class User {
    // fields and methods
    }

其他常用注解

19.@Value
  • 作用: 用于将外部属性值注入到Spring Bean中。
  • 细节: 可以用于注入属性文件中的值、系统环境变量、系统属性等。
  • 示例:
    @Value("${my.property}")
    private String myProperty;
20.@Autowired
  • 作用: 自动装配Bean,进行依赖注入。
  • 细节: Spring会自动满足Bean的依赖。可以用于字段、构造函数和方法上。
  • 示例:
    @Service
    public class MyService {
    @Autowired
    private MyRepository myRepository;
    }
21.@Bean
  • 作用: 用于定义一个Spring Bean。
  • 细节: 通常用于配置类中,定义的方法返回的对象会被注册为Spring容器中的Bean。
  • 示例:
    @Configuration
    public class AppConfig {
    @Bean
    public MyService myService() {
    return new MyServiceImpl();
    }
    }
22.@Conditional
  • 作用: 根据特定条件创建Bean。
  • 细节: 可以与自定义条件类一起使用,只有在条件满足时,Spring才会创建该Bean。
  • 示例:
    @Bean
    @Conditional(MyCondition.class)
    public MyService myService() {
    return new MyServiceImpl();
    }
23.@Primary
  • 作用: 指定当一个接口有多个实现时,优先选择的Bean。
  • 示例:
    @Service
    @Primary
    public class PrimaryService implements MyService {
    }
24.@Qualifier
  • 作用: 配合@Autowired使用,用于指定注入的Bean的名称或ID。
  • 示例:
    @Service
    public class MyService {
    @Autowired
    @Qualifier("myRepositoryImpl")
    private MyRepository myRepository;
    }
25.@Lazy
  • 作用: 延迟初始化Bean,只有在首次使用时才创建Bean。
  • 示例:
    @Service
    @Lazy
    public class LazyService {
    }
26.@Scope
  • 作用: 指定Bean的作用域(单例、多例、请求、会话等)。
  • 示例:
    @Service
    @Scope("prototype")
    public class PrototypeService {
    }

其他注解

简化POJO开发的注解

这三个注解通常与Lombok(一种Java库)结合使用,用于简化POJO(Plain Old Java Object)的开发。

1.@Data

  • 作用:@Data是一个复合注解,集成了@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor的功能。

  • 功能:

    • @ToString: 自动生成toString()方法,包含所有字段。
    • @EqualsAndHashCode: 自动生成equals()hashCode()方法,基于所有非静态和非瞬态字段。
    • @Getter@Setter: 自动生成字段的 getter 和 setter 方法。
    • @RequiredArgsConstructor: 自动生成包含必需字段的构造方法。
  • 示例:

    import lombok.Data;
    @Data
    public class User {
    private Long id;
    private String username;
    private String email;
    }

    编译时,Lombok会自动生成如下代码:

    public class User {
    private Long id;
    private String username;
    private String email;
    // 自动生成的 toString(), equals(), hashCode(), getter 和 setter 方法
    // 以及包含所有字段的构造方法
    }

2.@AllArgsConstructor

  • 作用: 自动生成包含所有字段的构造方法。

  • 示例:

    import lombok.AllArgsConstructor;
    import lombok.Data;
    @Data
    @AllArgsConstructor
    public class User {
    private Long id;
    private String username;
    private String email;
    }

    编译时,Lombok会自动生成如下构造方法:

    public User(Long id, String username, String email) {
    this.id = id;
    this.username = username;
    this.email = email;
    }

3.@NoArgsConstructor

  • 作用: 自动生成无参构造方法。

  • 示例:

    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @NoArgsConstructor
    public class User {
    private Long id;
    private String username;
    private String email;
    }

    编译时,Lombok会自动生成如下无参构造方法:

    public User() {
    // 空构造方法
    }
http://www.jsqmd.com/news/531513/

相关文章:

  • 2026年比较好的铝皮批发/铝皮直管/​管道铝皮保温/​铝皮保温施工直销厂家推荐 - 品牌宣传支持者
  • 用代码探索黑翅鸢算法优化的时序预测模型
  • 2026宜宾优质搬家品牌推荐含钢琴搬运:宜宾厂房搬迁/宜宾商场撤柜/宜宾学校搬迁/宜宾居民搬家/宜宾搬家公司/宜宾日式搬家/选择指南 - 优质品牌商家
  • 3步掌握PBR材质生成:让3D建模效率提升70%
  • 2026/3/24 数组
  • 基于comsol的三维水平集激光烧蚀熔池流动数值模拟,考虑反冲压力,马兰戈尼对流,表面张力,重...
  • 2026年热门的数控高速冲床/肘节式高速冲床销售厂家推荐 - 品牌宣传支持者
  • AI编程使用问题汇总~持续更新中
  • 揭开LoRA微调的神秘面纱:推理时,LoRA究竟是怎么起作用的?
  • java毕业设计基于ssm高校奖助学金系统
  • 《堆的 shift up》
  • 实战派指南:用MONAI Transform流水线,5步搞定3D CT脾脏分割数据预处理
  • 国内使用huggingface下载大模型教程
  • [特殊字符] Nano-Banana效果展示:支持多部件层级嵌套的复杂产品爆炸图
  • 22026.3.22/23/24 CAD学习十二--图层功能入门和技巧讲解
  • 手机相机对焦玄学揭秘:PDAF相位对焦在vivo/一加中的实际表现对比
  • 免费开源硬件监控神器:LibreHardwareMonitor完全使用指南
  • Notepad--:跨平台文本编辑器的终极指南,为中文用户量身打造
  • 供电局无人机巡检合作优质机构推荐:无人机行业、无人机资源加盟、无人机资质合作、无人机院校低空专业共建、无人机驾驶培训选择指南 - 优质品牌商家
  • Chroma2-Kaleidoscope:免费AI绘图新模型值得期待吗?
  • 按键精灵新手必看:5分钟搞定LOL自动回复脚本(附祖安话生成代码)
  • 为什么MRAM还没取代你的电脑内存?深入解析DRAM、SRAM与MRAM的实战对比
  • 拓竹工单打标:RAG方案零返工秘籍
  • Python实战:三种迭代法解线性方程组对比(附完整代码与性能测试)
  • AI模型协同新范式:开源工具如何重塑智能任务处理流程
  • 2025技术面试终极指南:从算法刷题到系统设计的完整通关路线
  • 告别TeamViewer!用OpenWRT的SFTP+内网穿透实现跨平台文件互传(Windows/Mac/Linux全兼容)
  • 亲测IndexTTS-2-LLM:CPU也能跑的智能语音合成,效果太自然了!
  • 深度解析:全面探索平面手性COMSOL光学仿真技术,BIC驱动下的最大平面手性特征,涵盖能带、...
  • java毕业设计基于SSM的驾校培训预约管理系统