Spring Boot常用注解详细说明

SpringBoot提供了一系列注解来简化Java应用开发,如@RestController用于创建RESTful控制器,@RequestMapping及其子注解处理HTTP请求映射,@Entity和@Repository处理数据访问,@Autowired实现依赖注入,@Configuration定义配置类。这些注解覆盖了从路由到异常处理的多个方面,极大地提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot是一个用于构建独立的、基于Spring框架的Java应用程序的开发框架。它提供了许多注解,用于简化开发过程并提供特定功能。下面是一些常用的Spring Boot注解,按照功能进行分类说明:

1. 控制器(Controller)注解:

  • @RestController:将类标记为RESTful风格的控制器,自动将返回值转换为JSON响应。
  • @Controller:将类标记为基于MVC的控制器。

示例:

@RestController
public class UserController {
    @GetMapping("/users")
    public List<User> getUsers() {
        // 返回用户列表
    }
}

2. 路由(Routing)注解:

  • @RequestMapping:映射HTTP请求到方法或控制器类,指定处理请求的URL路径、HTTP方法、媒体类型等。
  • @GetMapping:映射HTTP GET请求到方法。
  • @PostMapping:映射HTTP POST请求到方法。
  • @PutMapping:映射HTTP PUT请求到方法。
  • @DeleteMapping:映射HTTP DELETE请求到方法。
  • @PatchMapping:映射HTTP PATCH请求到方法。

示例:

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        // 根据ID获取用户
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        // 创建新用户
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable("id") Long id) {
        // 删除用户
    }
}

3. 数据访问(Data Access)注解:

  • @Entity:将类标记为JPA实体。
  • @Repository:将类标记为数据访问组件。
  • @Transactional:指定事务的边界。

示例:

@Entity
public class User {
    // 实体类定义
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 数据访问方法定义
}

4. 依赖注入(Dependency Injection)注解:

  • @Autowired:自动装配Bean依赖。
  • @Qualifier:指定注入的Bean的名称。
  • @Value:注入配置属性值。

示例:

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 其他方法
    @Value("${spring.datasource.username}")
 	private String databaseSchema;

}

5. 配置(Configuration)注解:

  • @Configuration:将类标记为配置类。
  • @ComponentScan:指定要扫描的组件包。
  • @PropertySource:指定属性文件的位置。

示例:

@Configuration
@ComponentScan("com.example")
@PropertySource("classpath:config.properties")
public class AppConfig {
// 配置类定义
}
config.properties")
public class AppConfig {
    // 配置类定义
}

6. AOP(Aspect-Oriented Programming)注解:

  • @Aspect:将类标记为切面。
  • @Before:在方法执行前执行通知。
  • @After:在方法执行后执行通知。
  • @Around:在方法执行前后执行通知。

示例:

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(public * com.example.service.*.*(..))")
    public void beforeMethodExecution(JoinPoint joinPoint) {
        // 在方法执行前执行日志记录
    }

    @After("execution(public * com.example.service.*.*(..))")
    public void afterMethodExecution(JoinPoint joinPoint) {
        // 在方法执行后执行日志记录
    }
}

7. 异步处理(Asynchronous Processing)注解:

  • @Async:将方法标记为异步执行,可以在方法上直接使用,也可以应用在类级别的方法上,作用于整个类的所有方法。

示例:

@Service
public class EmailService {
    @Async
    public CompletableFuture<Void> sendEmail(String recipient, String message) {
        // 异步发送邮件
    }
}

8. 定时任务(Scheduled Tasks)注解:

  • @Scheduled:将方法标记为定时任务,用于定期执行方法。

示例:

@Component
public class ScheduledTasks {
    @Scheduled(fixedRate = 5000)
    public void performTask() {
        // 定时执行任务
    }
}

9. 条件装配(Conditional Configuration)注解:

  • @ConditionalOnProperty:根据配置属性的值决定是否加载Bean或配置类。
  • @ConditionalOnClass:根据类的存在与否决定是否加载Bean或配置类。
  • @ConditionalOnBean:根据Bean的存在与否决定是否加载Bean或配置类。

示例:

@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyFeatureConfiguration {
    // 根据配置属性决定是否加载配置类
}

10. 异常处理(Exception Handling)注解:

- `@ControllerAdvice`:定义全局异常处理器。
- `@ExceptionHandler`:定义异常处理方法。

示例:

@ControllerAdvice
 public class GlobalExceptionHandler {
     @ExceptionHandler(RuntimeException.class)
     public ResponseEntity<String> handleRuntimeException(RuntimeException ex) {
         // 处理运行时异常
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴剑飘零西复东

非常感谢您对我的博客的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值