超实用!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博客

相关推荐
陈大爷(有低保)1 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu14 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
王哲晓35 分钟前
Linux通过yum安装Docker
java·linux·docker
java66666888840 分钟前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存41 分钟前
源码分析:LinkedList
java·开发语言
执键行天涯41 分钟前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言