超实用!Spring Boot 常用注解详解与应用场景

目录

[一、Web MVC 开发时,对于三层的类注解](#一、Web MVC 开发时,对于三层的类注解)

[1.1 @Controller](#1.1 @Controller)

[1.2 @Service](#1.2 @Service)

[1.3 @Repository](#1.3 @Repository)

[1.4 @Component](#1.4 @Component)

二、依赖注入的注解

[2.1 @Autowired](#2.1 @Autowired)

[2.2 @Resource](#2.2 @Resource)

[2.3 @Resource 与 @Autowired 的区别](#2.3 @Resource 与 @Autowired 的区别)

[2.3.1 实例讲解](#2.3.1 实例讲解)

[2.4 @Value](#2.4 @Value)

[2.5 @Data](#2.5 @Data)

[三、Web 常用的注解](#三、Web 常用的注解)

[3.1 @RequestMapping](#3.1 @RequestMapping)

[3.2 @RequestParam](#3.2 @RequestParam)

[3.2.1 语法](#3.2.1 语法)

[3.2.2 实例](#3.2.2 实例)

[3.3 @PathVariable](#3.3 @PathVariable)

[3.4 @RequestParam 和 @PathVariable 区别](#3.4 @RequestParam 和 @PathVariable 区别)

[3.5 @ResponseBody 和 @RequestBody](#3.5 @ResponseBody 和 @RequestBody)

[3.6 @RestController](#3.6 @RestController)

[3.7 @ControllerAdvice 和 @ExceptionHandler](#3.7 @ControllerAdvice 和 @ExceptionHandler)

[四、Spring Boot 常用的注解](#四、Spring Boot 常用的注解)

[4.1 @SpringBootApplication](#4.1 @SpringBootApplication)

[4.2 @EnableAutoConfiguration](#4.2 @EnableAutoConfiguration)

[4.3 @Configuration](#4.3 @Configuration)

[4.4 @ComponentScan](#4.4 @ComponentScan)

[五、AOP 常用的注解](#五、AOP 常用的注解)

[5.1 @Aspect](#5.1 @Aspect)

[5.2 @After](#5.2 @After)

[5.3 @Before](#5.3 @Before)

[5.4 @Around](#5.4 @Around)

[5.5 @Pointcut](#5.5 @Pointcut)

六、测试常用的注解

[6.1 @SpringBootTest](#6.1 @SpringBootTest)

[6.2 @Test](#6.2 @Test)

[6.3 @RunWith](#6.3 @RunWith)

[6.4 其他测试注解](#6.4 其他测试注解)

七、其他常用注解

[7.1 @Transactional](#7.1 @Transactional)

[7.2 @Cacheable](#7.2 @Cacheable)

[7.3 @PropertySource](#7.3 @PropertySource)

[7.4 @Async](#7.4 @Async)

[7.5 @EnableAsync](#7.5 @EnableAsync)

[7.6 @EnableScheduling](#7.6 @EnableScheduling)

[7.7 @Scheduled](#7.7 @Scheduled)


一、Web MVC 开发时,对于三层的类注解

1.1 @Controller

@Controller 注解用于标识一个类是 Spring MVC 控制器,处理用户请求并返回相应的视图。

java 复制代码
@Controller
public class MyController {
    // Controller methods
}

1.2 @Service

@Service 注解用于标识一个类是业务层组件,通常包含了业务逻辑的实现。

java 复制代码
@Service
public class MyService {
    // Service methods
}

1.3 @Repository

@Repository 注解用于标识一个类是数据访问层组件,通常用于对数据库进行操作

java 复制代码
@Repository
public class MyRepository {
    // Data access methods
}

1.4 @Component

@Component 是一个通用的组件标识,可以用于标识任何层次的组件,但通常在没有更明确的角色时使用。

java 复制代码
@Component
public class MyComponent {
    // Class implementation
}

二、依赖注入的注解

2.1 @Autowired

@Autowired 注解用于自动装配 Bean,可以用在字段、构造器、方法上

java 复制代码
@Service
public class MyService {
    @Autowired
    private MyRepository myRepository;
}

2.2 @Resource

@Resource 注解也用于依赖注入,通常用在字段上,可以指定要注入的 Bean 的名称

java 复制代码
@Service
public class MyService {
    @Resource(name = "myRepository")
    private MyRepository myRepository;
}

2.3 @Resource@Autowired 的区别

  • @Autowired 是 Spring 提供的注解,按照类型进行注入。
  • @Resource 是 JavaEE 提供的注解,按照名称进行注入。在 Spring 中也可以使用,并且支持指定名称。
2.3.1 实例讲解

新建 Animal 接口类,以及两个实现类 CatDog

java 复制代码
public interface Animal {
    String makeSound();
}

@Component
public class Cat implements Animal {
    @Override
    public String makeSound() {
        return "Meow";
    }
}

@Component
public class Dog implements Animal {
    @Override
    public String makeSound() {
        return "Woof";
    }
}

编写测试用例:

java 复制代码
@Service
public class AnimalService {
    @Autowired
    private Animal cat;

    @Resource(name = "dog")
    private Animal dog;

    public String getCatSound() {
        return cat.makeSound();
    }

    public String getDogSound() {
        return dog.makeSound();
    }
}

2.4 @Value

@Value 注解用于从配置文件中读取值,并注入到属性中。

java 复制代码
@Service
public class MyService {
    @Value("${app.message}")
    private String message;
}

2.5 @Data

@Data 是 Lombok 提供的注解,用于自动生成 Getter、Setter、toString 等方法。

java 复制代码
@Data
public class MyData {
    private String name;
    private int age;
}

三、Web 常用的注解

3.1 @RequestMapping

@RequestMapping 注解用于映射请求路径,可以用在类和方法上。

java 复制代码
@Controller
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring!";
    }
}

3.2 @RequestParam

@RequestParam 注解用于获取请求参数的值。

3.2.1 语法
java 复制代码
@RequestParam(name = "paramName", required = true, defaultValue = "default")
3.2.2 实例
java 复制代码
@GetMapping("/greet")
public String greet(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name) {
    return "Hello, " + name + "!";
}

3.3 @PathVariable

@PathVariable 注解用于从 URI 中获取模板变量的值。

java 复制代码
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
    // Retrieve user by ID
}

3.4 @RequestParam@PathVariable 区别

  • @RequestParam 用于获取请求参数。
  • @PathVariable 用于获取 URI 中的模板变量。

3.5 @ResponseBody@RequestBody

  • @ResponseBody 注解用于将方法的返回值直接写入 HTTP 响应体中。
  • @RequestBody 注解用于从 HTTP 请求体中读取数据。

3.6 @RestController

@RestController 注解相当于 @Controller@ResponseBody 的组合,用于标识 RESTful 风格的控制器。

java 复制代码
@RestController
@RequestMapping("/api")
public class MyRestController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring!";
    }
}

3.7 @ControllerAdvice@ExceptionHandler

@ControllerAdvice 注解用于全局处理异常,@ExceptionHandler 用于定义处理特定异常的方法。

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
    }
}

四、Spring Boot 常用的注解

4.1 @SpringBootApplication

@SpringBootApplication 是一个复合注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan

java 复制代码
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

4.2 @EnableAutoConfiguration

@EnableAutoConfiguration 注解用于开启 Spring Boot 的自动配置机制。

4.3 @Configuration

@Configuration 注解用于定义配置类,替代传统的 XML 配置文件。

java 复制代码
@Configuration
public class MyConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

4.4 @ComponentScan

@ComponentScan 注解用于配置组件扫描的基础包。

java 复制代码
@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

五、AOP 常用的注解

5.1 @Aspect

@Aspect 注解用于定义切面类,通常与其他注解一起使用。

java 复制代码
@Aspect
@Component
public class MyAspect {
    // Aspect methods
}

5.2 @After

@After 注解用于定义后置通知,方法在目标方法执行后执行。

java 复制代码
@After("execution(* com.example.service.*.*(..))")
public void afterMethod() {
    // After advice
}

5.3 @Before

@Before 注解用于定义前置通知,方法在目标方法执行前执行

java 复制代码
@Before("execution(* com.example.service.*.*(..))")
public void beforeMethod() {
    // Before advice
}

5.4 @Around

@Around 注解用于定义环绕通知,方法可以控制目标方法的执行。

java 复制代码
@Around("execution(* com.example.service.*.*(..))")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {
    // Before advice
    Object result = joinPoint.proceed(); // Proceed to the target method
    // After advice
    return result;
}

5.5 @Pointcut

@Pointcut 注解用于定义切点,将切点表达式提取出来,供多个通知共享。

java 复制代码
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() {
    // Pointcut expression
}

六、测试常用的注解

6.1 @SpringBootTest

@SpringBootTest 注解用于启动 Spring Boot 应用程序的测试。

java 复制代码
@SpringBootTest
public class MyApplicationTests {
    // Test methods
}

6.2 @Test

@Test 注解用于标识测试方法。

java 复制代码
@Test
public void myTestMethod() {
    // Test method
}

6.3 @RunWith

@RunWith 注解用于指定运行测试的类。

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
    // Test methods
}

6.4 其他测试注解

  • @Before: 在测试方法之前执行。
  • @After: 在测试方法之后执行。
  • @BeforeClass: 在类加载时执行一次。
  • @AfterClass: 在类卸载时执行一次。

七、其他常用注解

7.1 @Transactional

@Transactional 注解用于声明事务,通常用在方法或类上。

java 复制代码
@Service
@Transactional
public class MyTransactionalService {
    // Transactional methods
}

7.2 @Cacheable

@Cacheable 注解用于声明方法的结果可以被缓存。

java 复制代码
@Service
public class MyCachingService {
    @Cacheable("myCache")
    public String getCachedData(String key) {
        // Method implementation
    }
}

7.3 @PropertySource

@PropertySource 注解用于引入外部的属性文件。

java 复制代码
@Configuration
@PropertySource("classpath:my.properties")
public class MyConfig {
    // Configuration methods
}

7.4 @Async

@Async 注解用于声明异步方法,通常用在方法上。

java 复制代码
@Service
public class MyAsyncService {
    @Async
    public void asyncMethod() {
        // Asynchronous method implementation
    }
}

7.5 @EnableAsync

@EnableAsync 注解用于开启异步方法的支持。

java 复制代码
@Configuration
@EnableAsync
public class MyConfig {
    // Configuration methods
}

7.6 @EnableScheduling

@EnableScheduling 注解用于开启计划任务的支持。

java 复制代码
@Configuration
@EnableScheduling
public class MyConfig {
    // Configuration methods
}

7.7 @Scheduled

@Scheduled 注解用于定义计划任务的执行时间。

java 复制代码
@Service
public class MyScheduledService {
    @Scheduled(cron = "0 0 12 * * ?") // Run every day at 12 PM
    public void scheduledMethod() {
        // Scheduled method implementation
    }
}

以上几乎涵盖了所有springBoot和springFramework的常见注解,博客整体框架参考学习Spring Boot 注解,这一篇就够了(附带部分注解实例讲解)_springboot注解 举例-CSDN博客

相关推荐
即将进化成人机4 分钟前
springboot项目创建方式
java·spring boot·后端
教练、我想打篮球12 分钟前
117 javaweb servlet+jsp 项目中修改了 数据库连接配置, 却怎么都不生效
java·servlet·jdbc·jsp
你不是我我14 分钟前
【Java 开发日记】我们来说一说 Redis IO 多路复用模型
java·开发语言·redis
SadSunset16 分钟前
(13)复杂查询
java·笔记·架构·mybatis
浩瀚地学17 分钟前
【Java】ArrayList
java·开发语言·经验分享·笔记
阿杰同学25 分钟前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式
这样の我25 分钟前
java 模拟chrome指纹 处理tls extension顺序
java·开发语言·chrome
vx_bisheyuange26 分钟前
基于SpringBoot的游戏交易系统
spring boot·后端·游戏·毕业设计
Genevieve_xiao30 分钟前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
4311媒体网32 分钟前
php和c++哪个更好学?C++难学吗?
java·c++·php