正确使用 SpringBoot 注解,可减少不必要的配置和维护工作,让我们更加专注于业务逻辑的实现,极大地简化了开发流程。
反之,SpringBoot 注解使用不当,就可能会导致代码难以维护、性能下降、甚至出现安全漏洞。
本文主要介绍 25 个最为核心的 SpringBoot 注解,以及其作用、功能和使用示例。
文末附我创作的:《2023版 SpringBoot 面试题合集》及《SpringBoot 最全学习路线》
@SpringBootApplication 是一个组合注解,用于标注 SpringBoot 应用程序的主类。
它包含了@Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解的功能,简化了配置和启动过程。
示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController 注解用于标注控制器类,表示该类处理 HTTP 请求并返回 RESTful 风格的响应。
它相当于 @Controller 和 @ResponseBody 的组合,简化了开发 RESTful 接口的过程。
示例:
@RestController
public class UserController {
@GetMapping("/users")
public List getUsers() {
// 返回用户列表
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户
}
}
@RequestMapping 注解用于映射 HTTP 请求路径到控制器的方法上。
可以用于处理 GET、POST、PUT、DELETE 等不同类型的请求,并支持路径变量、请求参数等的定义。
示例:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List getUsers() {
// 返回用户列表
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据用户ID获取用户信息
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户
}
@PutMapping("/users/{id}")
public User updateUser(@PathVariable("id") Long id, @RequestBody User user) {
// 根据用户ID更新用户信息
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable("id") Long id) {
// 根据用户ID删除用户
}
@Autowired 注解用于自动装配依赖对象,实现对象的自动注入。
它可以用于构造方法、属性和方法上,简化了依赖注入的配置过程。
示例:
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 其他业务方法...
}
@ComponentScan 注解用于自动扫描并注册 Spring 组件,包括控制器、服务、存储库等。
它会根据指定的包路径自动发现标有 @Component 及其派生注解的类,并将其注册为 Spring 组件。
示例:
@SpringBootApplication
@ComponentScan("com.example")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration 注解用于标识配置类,表示该类包含 Bean 定义的方法。
在 SpringBoot 中,通常与 @Bean 注解一起使用,用于定义和注册 Bean。
示例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
// 其他Bean定义方法...
}
@Bean 注解用于定义 Bean 对象,表示该方法返回的对象将被 Spring 容器管理。
在 @Configuration 注解的类中使用,用于声明依赖对象的创建和配置。
示例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
// 其他Bean定义方法...
}
@Value 注解用于注入外部配置文件中的属性值到变量中。
它可以用于字段、方法参数和方法返回值,使得配置值的使用更加方便。
示例:
@Service
public class UserService {
@Value("${app.user.defaultRole}")
private String defaultRole;
// 其他业务方法
}
@Profile 注解用于标记特定的配置或组件,使其在特定的环境或配置条件下生效。
可以通过在应用程序的配置文件中设置不同的profile来选择性地加载相应的配置和组件。
示例:
@Configuration
@Profile("development")
public class DevelopmentConfig {
// 开发环境下的配置...
}
@Configuration
@Profile("production")
public class ProductionConfig {
// 生产环境下的配置...
}
@Conditional 注解用于根据条件来决定是否注册 Bean 或配置组件。
可以根据特定的条件判断,动态地控制 Bean 的创建和注册过程。
示例:
@Configuration
public class ConditionalConfig {
@Bean
@Conditional(DatabaseTypeCondition.class)
public DataSource dataSource() {
// 根据条件判断选择不同的数据源类型进行创建和配置
}
}
public class DatabaseTypeCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// 根据特定条件判断是否满足创建数据源的条件
}
}
@PathVariable 注解用于从请求路径中获取路径变量的值,并将其绑定到方法参数中。
示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id查询用户信息
return userService.getUserById(id);
}
@RequestParam 注解用于获取请求参数的值,并将其绑定到方法参数中。
示例:
@PostMapping("/users")
public User createUser(@RequestParam("name") String name,
@RequestParam("age") int age) {
// 创建用户并返回结果
return userService.createUser(name, age);
}
@RequestBody 注解用于将请求体的内容绑定到方法参数或对象中。
示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户并返回结果
return userService.createUser(user);
}
@PostMapping 注解用于将方法映射到 HTTP POST 请求,并指定请求路径。
示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户并返回结果
return userService.createUser(user);
}
@GetMapping 注解用于将方法映射到 HTTP GET 请求,并指定请求路径。
示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id查询用户信息
return userService.getUserById(id);
}
@Service 注解用于标识一个类为业务逻辑层的组件,由 Spring 进行管理。
示例:
@Service
public class UserService {
// 业务逻辑代码
}
@Repository 注解用于标识一个类为数据访问层的组件,由 Spring 进行管理。
示例:
@Repository
public class UserRepository {
// 数据访问代码
}
@EnableAutoConfiguration 注解用于启用 SpringBoot 的自动配置功能,根据项目的依赖自动配置应用程序。
示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableCaching 注解用于启用 Spring 的缓存功能,可以在方法上添加缓存相关的注解,例如 @Cacheable、@CacheEvict 等,以实现方法级别的缓存控制。
示例:
@Service
@EnableCaching
public class ProductService {
@Cacheable("products")
public List getAllProducts() {
// 从数据库中获取产品列表
return productRepository.getAllProducts();
}
@CacheEvict(value = "products", allEntries = true)
public void refreshCache() {
// 清除产品缓存
}
}
@EnableAsync 注解用于启用 Spring 的异步方法执行功能,可以在方法上添加 @Async 注解,使方法异步执行。
示例:
@Service
@EnableAsync
public class EmailService {
@Async
public void sendEmail(String recipient, String message) {
// 异步发送邮件
}
}
@Transactional 注解用于标识方法或类需要在事务管理下执行,保证方法的原子性和一致性。
示例:
@Service
public class OrderService {
@Transactional
public void createOrder(Order order) {
// 创建订单并保存到数据库
}
}
@RestControllerAdvice 注解用于定义全局异常处理器,处理应用中抛出的异常,并返回适当的响应信息。
示例:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity handleException(Exception ex) {
// 处理异常并返回响应
}
}
@Validated 注解用于在控制器方法的参数上添加校验注解,实现请求参数的校验功能。
示例:
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@Validated @RequestBody User user) {
// 校验用户信息并创建用户
}
}
@ConfigurationProperties 注解用于将外部配置文件中的属性值绑定到Bean中,实现配置的统一管理。
示例:
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;
// 省略getter和setter
}
@Scheduled 注解用于指定方法定时执行的时间规则,实现定时任务的功能。
示例:
@Service
public class TaskService {
@Scheduled(cron = "0 0 0 * * ?")
public void runDailyTask() {
// 每天执行一次的任务
}
}
为了全面掌握 SpringBoot ,前段时间我创作了《2023版 SpringBoot 面试题合集》及《SpringBoot 最全学习路线》。
如果有需要的话,我的账号主页看第一篇文章。
正确使用 SpringBoot 注解,可减少繁琐的配置工作,让我们更加专注于业务逻辑的实现。
以上,是 SpringBoot 注解及其作用、功能和示例代码的总结,希望对大家有用。
我是爱分享的程序员宝妹儿,谢谢关注 Java面试题宝。
如果觉得不错,请【点赞+转发+关注】一键三连支持下。
---end---
页面更新:2024-03-01
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号