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

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

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 包及其子包。

@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。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}
1.3 @EnableAutoConfiguration

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

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

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

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

@ComponentScan(basePackages = "com.example")

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

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

2.1 @Component

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

@Component
public class MyComponent {
}
2.2 @Service

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

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

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

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

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

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

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

@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 仍然是同一个实例。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}
2.7 @Autowired

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

@Service
public class MyService {
    @Autowired
    private MyRepository repository;
}
2.8 @Primary

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

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

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

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

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

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

3. 生命周期相关注解

3.1 @PostConstruct

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

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

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

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

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

4.1 @Conditional

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

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

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

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

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

5.1 @RequestMapping

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

@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 设计。

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

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

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

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

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

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

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

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

6.1 @Async

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

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

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

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

@SpringBootApplication
@EnableAsync
public class Application {
}

7. 缓存相关注解

7.1 @Cacheable

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

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

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

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

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

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

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

@SpringBootApplication
@EnableCaching
public class Application {
}

8. 事务管理注解

8.1 @Transactional

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

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

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

@SpringBootApplication
@EnableTransactionManagement
public class Application {
}

http://www.kler.cn/a/386923.html

相关文章:

  • 计算机的错误计算(一百五十二)
  • 【C++】详解RAII思想与智能指针
  • docker基础:搭建centos7(详见B站泷羽sec)
  • 使用Git工具在GitHub的仓库中上传文件夹(超详细)
  • 鸿蒙多线程开发——并发模型对比(Actor与内存共享)
  • Python 实现阿里滑块全攻略
  • fpga开发原理图设计仿真分析
  • Kafka生产者如何提高吞吐量?
  • 使用 Redux 在 Flutter鸿蒙next 中实现状态管理
  • Excel:vba实现正则匹配
  • 【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本
  • MQTT协议解析 : 物联网领域的最佳选择
  • 浏览器是如何渲染页面的? - 2024最新版前端秋招面试短期突击面试题
  • Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
  • 【Webpack配置全解析】打造你的专属构建流程️(1-4)
  • DBeaver工具连接Hive
  • 冒泡选择法(c基础)
  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--角色可访问接口管理
  • 探索 Python 的新边疆:sh 库的革命性功能
  • AWTK fscript 中的 JSON 扩展函数
  • Spark 的介绍与搭建:从理论到实践
  • Java命名规范
  • (2024.11.5)亚博树莓派5部署yolov8目标检测
  • Jmeter的安装,设置中文,解决乱码问题
  • A021基于Spring Boot的自习室管理和预约系统设计与实现
  • 前端实现数据下载为json文件