SpringBoot开发——Spring Boot 的9大类常用注解

news/2024/12/26 18:42:31 标签: spring boot, 常用注解

文章目录

  • 1. 组件相关注解
    • 1.1 @Controller:
    • 1.2 @Service:
    • 1.3 @Repository:
    • 1.4 @Component:
  • 2. 与 Bean 实例和生命周期相关的注解
    • 2.1 @Bean:
    • 2.2 @Scope:
    • 2.3 @Primary:
    • 2.4 @PostConstruct:
    • 2.5 @PreDestroy:
  • 3. 依赖注入注解
    • 3.1 @Autowired:
    • 3.2 @Resource:
    • 3.3 @Qualifier:
  • 4. SpringMVC 相关注解
    • 4.1 @RequestMapping:
    • 4.2 @RequestBody:
    • 4.3 @ResponseBody:
    • 4.4 @RestController:
    • 4.5 @RequestParam:
    • 4.6 @PathVariable:
    • 4.7 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:
  • 5. 配置相关注解
    • 5.1 @Configuration:
    • 5.2 @EnableAutoConfiguration:
    • 5.3 @ComponentScan:
    • 5.4 @SpringBootApplication:
    • 5.5 @EnableTransactionManagement:
    • 5.6 @ConfigurationProperties:
    • 5.7 @Conditional:
    • 5.8 @Value:
    • 5.9 @ConfigurationProperties:
    • 5.10 @PropertySource:
    • 5.11 @ImportResource:
  • 6. JPA 相关注解
    • 6.1 @Entity 和@Table:
    • 6.2 @Id:
    • 6.3 @Column:
    • 6.4 @GeneratedValue:
    • 6.5 @SequenceGenerator:
    • 6.6 @Transient:
    • 6.7 @Basic(fetch = FetchType.LAZY):
    • 6.8 @JoinColumn:
    • 6.9 @OneToOne、@OneToMany 和@ManyToOne:
  • 7. 异常处理相关注解
    • 7.1 @ControllerAdvice 和@ExceptionHandler:
  • 8. AOP 相关注解
    • 8.1 @Aspect:
    • 8.2 @Before:
    • 8.3 @After:
    • 8.4 @AfterReturning:
    • 8.5 @AfterThrowing:
    • 8.6 @Around:
    • 8.7 @Pointcut:
    • 8.8 @Order:
  • 9. 测试相关注解
    • 9.1 @Test:
    • 9.2 @ActiveProfiles:
    • 9.3 @RunWith 和@SpringBootTest:

在这里插入图片描述

1. 组件相关注解

1.1 @Controller:

用于修饰 MVC 中控制器层的组件。Spring Boot 中的组件扫描功能会识别此注解,并为被修饰的类实例化一个对象。它通常与@RequestMapping 一起使用。当 Spring MVC 收到请求时,会将其转发到指定路径的方法进行处理。

@Controller
@RequestMapping("/user/admin")
public class UserAdminController {
   
}

1.2 @Service:

通常用于修饰服务层的组件。声明一个对象时,会实例化该类对象并将其注入到 bean 容器中。

@Service
public class UserService {
   
    //...
}

1.3 @Repository:

用于修饰数据访问对象(DAO)层的组件。DAO 层的组件专注于系统数据的处理,例如数据库中的数据。它们也会被组件扫描并生成实例化对象。

@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
   
    //...
}

1.4 @Component:

一般指代组件。当组件难以分类时,可以使用此注解进行标记。其功能与@Service 类似。

@Component
public class DemoHandler {
   
    //...
}

2. 与 Bean 实例和生命周期相关的注解

2.1 @Bean:

用于修饰方法,表示该方法将创建一个 Bean 实例,并由 Spring 容器进行管理。示例代码如下:

@Configuration
public class AppConfig {
   
    // 相当于在 XML 中配置一个 Bean
    @Bean
    public Uploader initFileUploader() {
   
        return new FileUploader();
    }
}

2.2 @Scope:

用于声明 Spring Bean 实例的作用域。作用域如下:

  • singleton:单例模式。在 Spring 容器中实例是唯一的,这是 Spring 的默认实例作用域类型。
  • prototype:原型模式。每次使用时都会重新创建实例。
  • request:在同一请求中使用相同的实例,不同请求创建新的实例。
  • session:在同一会话中使用相同的实例,不同会话创建新的实例。
@Configuration
public class RestTemplateConfig {
   
    @Bean
    @Scope("singleton")
    public RestTemplate restTemplate() {
   
        return new RestTemplate();
    }
}

2.3 @Primary:

当存在同一对象的多个实例时,优先选择此实例。

@Configuration
@ComponentScan
public class JavaConfig {
   
    // 首选
    @Bean("b1")
    @Primary
    B b1() {
   
        return new B();
    }

    @Bean("b2")
    B b2() {
   
        return new B();
    }
}

2.4 @PostConstruct:

用于修饰方法,在对象实例创建和依赖注入完成后执行,可用于初始化对象实例。

2.5 @PreDestroy:

用于修饰方法,在对象实例即将被 Spring 容器移除时执行,可用于释放对象实例持有的资源。

public class Demo {
   
    public Demo() {
   
        System.out.println("构造方法...");
    }

    public void init() {
   
        System.out.println("init...");
    }
}


@PostConstruct
public void postConstruct() {
   
    System.out.println("postConstruct...");
}

@PreDestroy
public void preDestroy() {
   
    System.out.println("preDestroy...");
}

public void destroy() {
   
    System.out.println("destroy...");
}

输出:

构造方法...
postConstruct...
init...
preDestroy...
destroy...

3. 依赖注入注解

3.1 @Autowired:

根据对象的类型自动注入依赖对象。默认情况下,它要求注入的对象实例必须存在。可以配置 required = false 来注入可能不存在的对象。

@Controller
@RequestMapping("/user")
public class UserController {
   
    @Autowired
    private UserService userService;

    @Autowired(required = false)
    private UserConfig userConfig;
}

3.2 @Resource:

默认情况下,根据对象的名称自动注入依赖对象。如果要根据类型注入,可以设置属性

type = UmsAdminService.class@Controller
@RequestMapping("/user")
public class UserController {
   
    @Resource(name = "userServiceImpl")
    private UserService userService;
}

3.3 @Qualifier:

当存在同一类型的多个 bean 时,使用@Autowired 导入会导致错误,表示当前对象不唯一,Spring 不知道要导入哪个依赖。此时,我们可以使用@Qualifier 进行更细粒度的控制并选择其中一个实例。它通常与@Autowired 一起使用。示例如下:

@Autowired
@Qualifier("deptService")
private 

http://www.niftyadmin.cn/n/5800830.html

相关文章

linux 常用 Linux 命令指南

常用 Linux 命令指南 以下是一些常用的 Linux 命令,分类并附带简单说明,适合日常操作和快速参考。 1. 文件与目录操作 ls: 列出当前目录下的文件和子目录ls -l # 显示详细信息 ls -a # 显示隐藏文件cd: 切换目录cd /path/to/directorypwd: 显示当前工作目录pwdmkdir: 创…

Java:188 基于springboot妇幼健康管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本妇幼健康管理系统分为管理员、用户、医生三个权限。 管理员可以管理用户、医生的基本信息内容&#xff0c;可以管理药物信息以及患者预约信息等操作…

【express-generator】02-路由基本使用+api工具测试路由

上篇回顾 上一篇&#xff0c;我们介绍了安装创建和初始化一个express-generator应用程序&#xff0c;并且给了一些注意点&#xff0c;相信跟着步骤&#xff0c;你也可以做到文章里呈现的效果。 这一篇&#xff0c;我们有两大主题&#xff1a;路由的基本使用、api工具测试路由。…

云手机群控能用来做什么?

随着云手机的发展&#xff0c;云手机群控技术逐渐从小众的游戏多开工具&#xff0c;发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营&#xff0c;还是账号养成等场景&#xff0c;云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…

SQLSERVER、MYSQL LIKE查询特殊字符和转义字符相同与不同

SQL Server 和 MySQL 都支持 LIKE 操作符进行模式匹配&#xff0c;但它们在处理特殊字符和转义字符方面有一些差异。尽管两者有很多相似之处&#xff0c;但在某些细节上并不完全通用。以下是 SQL Server 和 MySQL 在 LIKE 操作符使用上的比较&#xff1a; 通配符 百分号 %&am…

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署 flyfish 1. 确保 vm.max_map_count ≥ 262144 这是指要调整Linux内核参数vm.max_map_count&#xff0c;以确保其值至少为262144。这个参数控制着进程可以映射的最大内存区域数量。对于某些应用程序&#xff08;如Ela…

IntelliJ IDEA 远程调试

IntelliJ IDEA 远程调试 在平时开发 JAVA 程序时&#xff0c;在遇到比较棘手的 Bug 或者是线上线下结果不一致的情况下&#xff0c;我们会通过打 Log 或者 Debug 的方式去定位并解决问题&#xff0c;两种方式各有利弊&#xff0c;今天就简要介绍下如何通过远程 Debug 的情况下…

Unity3D用正则判断身份证号或邮箱

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、正则判断邮箱格式👉二、正则判断身份证号👉壁纸分享👉总结👉前言 C#正则表达式(Regex)是一种用来匹配字符串模式的强大工具。在C#中,可以使用System.Text.RegularExpressions命名空间下的Regex类来处…