Spring Boot框架下的注解(完整版)

news/2024/11/12 15:12:32/

1. 应用程序主配置类注解

这些注解用于定义 Spring Boot 应用的主配置类,启用自动配置,设置扫描路径等。

1.1 @SpringBootApplication

作用@SpringBootApplication 是 Spring Boot 应用的核心注解,通常用于应用的启动类上,标识这是应用的入口。它是 @Configuration@EnableAutoConfiguration@ComponentScan 的组合注解,整合了三个注解的功能:

  • @Configuration:声明该类是一个配置类,可定义 Spring Bean 和配置项,替代传统的 XML 配置文件。
  • @EnableAutoConfiguration:启用自动配置,Spring Boot 会根据类路径中的依赖自动配置相关 Bean,比如有 spring-boot-starter-web 时会配置 Web MVC、Tomcat 等组件。
  • @ComponentScan:自动扫描指定包下的所有 Bean(如 @Controller@Service@Repository 等),默认扫描启动类所在包及其子包。

注意:如果要修改扫描路径,可以通过 scanBasePackages 参数指定。例如,@SpringBootApplication(scanBasePackages = "com.example") 会扫描 com.example 包及其子包。

java">@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
1.2 @Configuration

作用:将类标识为配置类,可以定义一个或多个 Bean,代替 XML 文件中的 <bean> 标签。该类中的所有 @Bean 方法会被 Spring 容器处理,方法返回的对象会被注册为 Spring Bean。
配置类在 Spring Boot 中用于组织和集中管理应用的配置,比如定义数据库、服务组件等 Bean。

java">@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}
1.3 @EnableAutoConfiguration

作用:启用自动配置,使 Spring Boot 根据应用的依赖自动装配所需的 Bean。这是 Spring Boot 的核心功能之一,通过自动判断类路径中的依赖,自动配置相关的组件和基础设施,比如数据库、Web MVC 等。

注意:通常不需要单独使用,因为已包含在 @SpringBootApplication 中。可以通过 exclude 参数排除不需要的自动配置类。

java">@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
1.4 @ComponentScan

作用:指定 Spring Boot 在启动时扫描的包路径,以自动发现和注册带 @Component@Service@Repository 等注解的类为 Bean。默认情况下,Spring Boot 会从主类所在包开始扫描;通过 @ComponentScan 可以自定义扫描路径,确保 Bean 被注册到 Spring 容器中。

java">@ComponentScan(basePackages = "com.example")

2. Bean 定义和依赖注入注解

这些注解用于定义 Spring Bean,控制 Bean 的创建和装配方式。

2.1 @Component

作用:将一个类声明为 Spring 管理的组件(Bean),让 Spring 自动检测和装配它。@Component 是一个通用注解,适用于任何需要被 Spring 管理的类。它是 Spring 核心容器的基础注解,@Service@Repository@Controller 都是其特化,分别用于标识不同的层次。

java">@Component
public class MyComponent {
}
2.2 @Service

作用@Service@Component 的一种特化,用于表示服务层的组件,通常用于编写业务逻辑或服务操作。它的语义性更强,标识了这是一个服务类,使代码的可读性和维护性更好。

java">@Service
public class MyService {public String process() {return "Processing";}
}
2.3 @Repository

作用@Repository@Component 的特化,用于数据访问层(DAO)组件上。Spring 还会将 @Repository 标注的类中的异常封装为数据访问异常(DataAccessException),以便统一处理持久化层的异常。

java">@Repository
public class MyRepository {public List<String> findData() {return // 查询逻辑;}
}
2.4 @Controller

作用@Controller 是 Spring MVC 中的控制器注解,用于将类标识为控制器,并处理 HTTP 请求。Spring 会将带 @Controller 的类作为 MVC 控制器组件来管理,这类组件主要用于返回视图页面或转发请求。

java">@Controller
public class MyController {@GetMapping("/index")public String index() {return "index";  // 返回视图名称}
}
2.5 @RestController

作用@RestController@Controller@ResponseBody 的组合,适用于 RESTful 服务。它使得控制器类中的所有方法默认都会直接返回数据(如 JSON),而不是返回视图页面,因此简化了开发 REST API 的配置。

java">@RestController
public class MyRestController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
2.6 @Bean

作用@Bean 用于定义一个方法,并将该方法的返回值注册为 Spring Bean。一般配合 @Configuration 使用,方法的名称即为 Bean 名称。可以在配置类中使用 @Bean 注解来定义第三方库中的类,或者需要通过某种复杂逻辑创建的类。

注意@Bean 方法会被 Spring 容器代理,以确保 Bean 的单例性,即便方法被多次调用,返回的 Bean 仍然是同一个实例。

java">@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}
2.7 @Autowired

作用@Autowired 用于自动注入依赖对象。可以作用于构造器、字段或方法上,默认按类型装配(byType)。若需按名称装配,可以结合 @Qualifier 注解使用。该注解帮助自动管理对象之间的依赖关系,减少手动注入的代码量。

java">@Service
public class MyService {@Autowiredprivate MyRepository repository;
}
2.8 @Primary

作用:在有多个同类型 Bean 的情况下,@Primary 指定默认优先使用的 Bean。适用于同类型的多个 Bean 存在且未明确指定注入对象时,通过 @Primary 确定默认选择的 Bean。

java">@Bean
@Primary
public MyService primaryService() {return new MyService();
}
2.9 @Qualifier

作用@Qualifier 用于配合 @Autowired 按名称装配 Bean,解决多 Bean 注入冲突。通常用于明确指定注入的 Bean 名称,尤其在有多个同类型 Bean 时。

java">@Autowired
@Qualifier("myService1")
private MyService myService;
2.10 @Value

作用@Value 注解用于将配置文件中的属性值注入到字段、方法参数或构造器参数中。支持 SpEL 表达式,可以动态获取配置文件中的值。

java">@Value("${app.name}")
private String appName;

3. 生命周期相关注解

3.1 @PostConstruct

作用:标记初始化方法,在 Bean 完成依赖注入后立即执行。常用于完成 Bean 初始化工作,比如初始化某些属性或调用依赖方法。@PostConstruct 是 JSR-250 标准的生命周期注解。

java">@Component
public class MyComponent {@PostConstructpublic void init() {System.out.println("Initialization logic here");}
}
3.2 @PreDestroy

作用:标记销毁方法,在 Bean 销毁之前执行,常用于释放资源或关闭连接。@PreDestroy 是 JSR-250 标准注解,在容器关闭之前会调用标注的方法。

java">@Component
public class MyComponent {@PreDestroypublic void cleanup() {System.out.println("Cleanup logic here");}
}

4. 条件化配置和环境控制注解

4.1 @Conditional

作用:条件性装配 Bean,只有在指定条件为 true 时才会创建该 Bean。可用于根据环境、配置文件或其他条件来加载特定的 Bean。@Conditional 需与 Condition 接口的实现类配合使用,常见的条件化配置用于多环境管理。

java">@Conditional(OnPropertyCondition.class)
@Bean
public MyService myService() {return new MyService();
}
4.2 @Profile

作用:用于基于环境配置加载特定的 Bean,可以用来加载不同环境下的配置,比如开发、测试、生产环境。在应用启动时,通过 spring.profiles.active 参数指定当前激活的环境。

java">@Profile("dev")
@Bean
public MyService devService() {return new DevService();
}

5. Web 请求映射和参数注解

5.1 @RequestMapping

作用:将请求路径映射到控制器方法上,支持多种 HTTP 请求方法(如 GET、POST、PUT、DELETE)。可以用于类级别或方法级别的路径映射。@RequestMapping 可用于构建 RESTful 风格的请求。

java">@RequestMapping("/api")
public class ApiController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
5.2 @GetMapping@PostMapping@PutMapping@DeleteMapping

作用:是 @RequestMapping 的简化版本,分别用于特定 HTTP 方法的请求(GET、POST、PUT、DELETE),更加简洁直观,适用于 REST API 设计。

java">@GetMapping("/hello")
public String hello() {return "Hello";
}
5.3 @PathVariable

作用:用于将 URL 路径中的变量绑定到方法参数上,通常用于 RESTful API 路径中的动态参数。

java">@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {return userService.findById(id);
}
5.4 @RequestParam

作用:用于获取 URL 请求参数,并将其绑定到方法参数上。可设置默认值和是否为必填参数。

java">@GetMapping("/search")
public String search(@RequestParam("query") String query) {return "Search result for " + query;
}
5.5 @RequestBody

作用:用于将 HTTP 请求体中的 JSON 数据直接绑定到方法参数上,常用于接收 JSON 格式的请求数据。

java">@PostMapping("/users")
public User createUser(@RequestBody User user) {return userService.save(user);
}

6. 异步和线程池管理注解

6.1 @Async

作用:用于将方法标记为异步方法,调用时不会阻塞调用者线程,异步方法会在独立线程中执行。常用于执行耗时操作或需要异步执行的任务。

注意:需要在主类或配置类上启用 @EnableAsync

java">@Async
public void asyncMethod() {System.out.println("Async method execution");
}
6.2 @EnableAsync

作用:启用 Spring 的异步方法支持,通常和 @Async 一起使用。添加此注解后,Spring 会自动配置异步线程池。

java">@SpringBootApplication
@EnableAsync
public class Application {
}

7. 缓存相关注解

7.1 @Cacheable

作用:用于将方法返回值缓存起来,提高性能。再次调用相同方法时,将直接返回缓存内容而无需再次执行方法。可以通过 key 参数指定缓存键。

java">@Cacheable(value = "users", key = "#id")
public User getUser(Long id) {return userRepository.findById(id);
}
7.2 @CachePut

作用:用于更新缓存,将方法的返回值放入缓存中,通常用于保存或更新操作,使缓存数据与数据库保持一致。

java">@CachePut(value = "users", key = "#user.id")
public User saveUser(User user) {return userRepository.save(user);
}
7.3 @CacheEvict

作用:用于清除缓存,可以指定清除特定缓存项或清空整个缓存。适用于删除操作或数据更新后清理无效缓存数据。

java">@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {userRepository.deleteById(id);
}
7.4 @EnableCaching

作用:启用 Spring 的缓存支持,使 @Cacheable@CachePut@CacheEvict 等注解生效。通常加在主类或配置类上。

java">@SpringBootApplication
@EnableCaching
public class Application {
}

8. 事务管理注解

8.1 @Transactional

作用:声明方法或类的数据库操作为事务性操作,使得所有数据库操作要么全部成功,要么全部回滚。常用于业务逻辑层,确保数据一致性。事务的传播、隔离级别、回滚条件等都可以通过参数进行控制。

java">@Transactional
public void performTransaction() {// 事务操作
}
8.2 @EnableTransactionManagement

作用:启用注解驱动的事务管理,通常与 @Transactional 配合使用。标注此注解后,Spring 会自动扫描 @Transactional 标注的方法并应用事务控制。

java">@SpringBootApplication
@EnableTransactionManagement
public class Application {
}

http://www.ppmy.cn/news/1545915.html

相关文章

反向代理模块

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

Stable Diffusion WebUI或ComfyUI下载不了huggingface?修改huggingface为国内镜像地址方法在这里

有时我们可能没有科学上网的方法&#xff0c;或者Linux系统你不会搭建科学上网的方法&#xff0c;这样你就不能访问huggingface自动下载模型了。 有人说&#xff0c;可以手动下载呀&#xff01; 但是&#xff0c;手动一个一个下载会很麻烦。 下面就讲&#xff0c;如何通过修…

[安洵杯 2019]easy_web 详细题解

知识点: 编码转换 命令执行 linux空格_关键字绕过 打开页面 发现url 是 /index.php?imgTXpVek5UTTFNbVUzTURabE5qYz0&cmd 有img参数和cmd参数 cmd参数是没赋值的,随便赋值为123456 页面没有反应 鼠标移动到图片下面时发现有东西,当然直接查看页面源代码也可以发现 尝…

Neo4j入门:详解Cypher查询语言中的MATCH语句

Neo4j入门&#xff1a;详解Cypher查询语言中的MATCH语句 引言什么是MATCH语句&#xff1f;示例数据1. 基础节点查询查询所有节点按标签查询节点 2. 关系查询基础关系查询指定关系方向指定关系类型 3. 使用WHERE子句4. 使用参数5. 多重MATCH和WITH子句实用技巧总结 引言 大家好…

前后端交互接口(三)

前后端交互接口&#xff08;三&#xff09; 前言 前两集我们先做了前后端交互接口的约定以及浅浅的阅读了一些proto代码。那么这一集我们就来看看一些重要的proto代码&#xff0c;之后把protobuffer给引入我们的项目当中&#xff01; gateway.proto 我们来看一眼我们的网关…

“单元测试”应该怎么写比较好

如何正确写单元测试 单元测试重要性写单元测试时存在的问题1、如何命名测试类&方法1.1、测试类命名规范1.2、测试方法命名规范 2、测试类的要求2.1测试行覆盖率100%2.2、单一职责2.3、可重复2.4、外部隔离&#xff0c;无任何外部依赖2.5、正确的使用断言2.6、不应该为了测试…

STM32单片机WIFI语音识别智能衣柜除湿消毒照明

实践制作DIY- GC0196-WIFI语音识别智能衣柜 一、功能说明&#xff1a; 基于STM32单片机设计-WIFI语音识别智能衣柜 二、功能介绍&#xff1a; STM32F103C系列最小系统板LCD1602显示器ULN2003控制的步进电机&#xff08;柜门开关&#xff09;5V加热片直流风扇紫外消毒灯DHT11…

python 语言入门

1.发展历程 之前国内&#xff08;软件为主&#xff09;使用最多的编程语言是 java&#xff08;C难学&#xff0c;主要应用于开发硬件&#xff09;。近年来由于 AI 的出现&#xff0c;python 逐渐火起来&#xff08;之前火不起来&#xff0c;是因为它是脚本&#xff0c;脚本优点…