Spring Boot是一个基于Spring Framework的开源框架,旨在简化开发财务应用程序的过程。在使用Spring Boot时,注解是核心的组成部分,能够帮助开发者高效地管理应用的配置和行为。下面是50个最常用的Spring Boot注解,涵盖了各种功能与场景的使用。

1. @SpringBootApplication

这是Spring Boot应用的核心注解,通常用于主类上,组合了@Configuration@EnableAutoConfiguration@ComponentScan三个注解。

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

2. @Configuration

表明该类是一个Spring配置类,可以用于定义Bean。

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

3. @Bean

用于定义一个Bean的方法,通常与@Configuration一起使用。

@Bean
public DataSource dataSource() {
    return new HikariDataSource();
}

4. @Component

用于定义一个Spring组件,Spring会自动扫描到并注册到上下文中。

@Component
public class MyComponent {
    public void doSomething() {
        // 业务逻辑
    }
}

5. @Service

用于标记服务层的组件,通常表示业务逻辑的处理。

@Service
public class UserService {
    public void addUser(User user) {
        // 添加用户
    }
}

6. @Repository

用于标记数据库操作层的组件,通常用于数据访问对象(DAO)。

@Repository
public class UserRepository {
    public User findUserById(Long id) {
        // 查询用户
    }
}

7. @Controller

定义一个控制器类,处理用户请求。

@Controller
public class UserController {
    @GetMapping("/users")
    public String getUserList(Model model) {
        model.addAttribute("users", userService.getAllUsers());
        return "userList";
    }
}

8. @RestController

结合了@Controller@ResponseBody,用于返回JSON数据。

@RestController
@RequestMapping("/api/users")
public class UserRestController {
    @GetMapping
    public List<User> getUsers() {
        return userService.getAllUsers();
    }
}

9. @RequestMapping

用于映射HTTP请求到具体的处理方法上。

@RequestMapping(value = "/users", method = RequestMethod.POST)
public ResponseEntity<User> createUser(@RequestBody User user) {
    return ResponseEntity.ok(userService.addUser(user));
}

10. @GetMapping

@RequestMapping的快捷方式,用于处理GET请求。

@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.findUserById(id);
}

11. @PostMapping

@RequestMapping的快捷方式,用于处理POST请求。

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    userService.addUser(user);
    return ResponseEntity.status(HttpStatus.CREATED).body(user);
}

12. @PutMapping

@RequestMapping的快捷方式,用于处理PUT请求。

@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
    userService.updateUser(id, user);
    return ResponseEntity.ok(user);
}

13. @DeleteMapping

@RequestMapping的快捷方式,用于处理DELETE请求。

@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
    return ResponseEntity.noContent().build();
}

14. @PathVariable

用于处理URL路径中的变量。

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

15. @RequestParam

用于处理请求参数。

@GetMapping("/users")
public List<User> getUsers(@RequestParam(defaultValue = "0") int page) {
    return userService.getUsers(page);
}

16. @RequestBody

用于将HTTP请求体转化为Java对象。

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

17. @ResponseBody

用于将方法的返回值直接放到HTTP响应体中。

@ResponseBody
@GetMapping("/hello")
public String sayHello() {
    return "Hello World!";
}

18. @Value

用于注入配置文件中的属性值。

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

19. @Autowired

用于自动注入Spring管理的Bean。

@Autowired
private UserService userService;

20. @ComponentScan

用于指定Spring的扫描路径。

@ComponentScan(basePackages = "com.example.service")

21. @EnableAutoConfiguration

用于开启Spring Boot的自动配置特性。

@EnableAutoConfiguration
public class MyApplication {
    // 启动类
}

22. @Profile

用于指定Bean的激活条件,即按照环境来加载不同的配置。

@Profile("dev")
@Bean
public DataSource dataSource() {
    // 开发环境的数据源配置
}

23. @Conditional

用于根据特定条件加载Bean。

@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
@Bean
public FeatureService featureService() {
    return new FeatureService();
}

24. @Primary

用于指定当存在多个同类型Bean时优先使用的Bean。

@Bean
@Primary
public DataSource primaryDataSource() {
    return new HikariDataSource();
}

25. @Lazy

用于懒加载Bean。

@Bean
@Lazy
public MyService myService() {
    return new MyService();
}

26. @Scheduled

用于定义定时任务。

@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
    System.out.println("The time is now " + new Date());
}

27. @Async

用于异步方法执行。

@Async
public void asyncMethod() {
    // 异步执行的逻辑
}

28. @Transactional

用于声明事务。

@Transactional
public void transferMoney(Account fromAccount, Account toAccount, BigDecimal amount) {
    // 转账逻辑
}

29. @EventListener

用于监听事件。

@EventListener
public void handleEvent(CustomEvent event) {
    // 处理事件
}

30. @Cacheable

用于标记可缓存的方法。

@Cacheable("users")
public User findUserById(Long id) {
    return userRepository.findById(id);
}

31. @CachePut

用于更新缓存。

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

32. @CacheEvict

用于清除缓存。

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

33. @ControllerAdvice

用于全局异常处理或数据绑定。

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFound() {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("用户未找到");
    }
}

34. @ResponseStatus

用于自定义响应状态。

@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException {
}

35. @InitBinder

用于初始化数据绑定。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(User.class, new UserPropertyEditor());
}

36. @SessionScope

用于声明会话范围的Bean。

@SessionScope
@Bean
public UserSession userSession() {
    return new UserSession();
}

37. @RequestScope

用于声明请求范围的Bean。

@RequestScope
@Bean
public RequestUser requestUser() {
    return new RequestUser();
}

38. @Singleton

用于声明单例Bean。

@Singleton
@Bean
public MySingletonBean mySingletonBean() {
    return new MySingletonBean();
}

39. @Scheduled(fixedDelay)

用于指定固定延迟的定时任务。

@Scheduled(fixedDelay = 2000)
public void runTask() {
    // 每隔2秒执行一次
}

40. @Scheduled(cron)

用于指定 Cron 表达式的定时任务。

@Scheduled(cron = "0 0/1 * * * ?")
public void cronJob() {
    // 每分钟执行一次
}

41. @EnableCaching

用于启用Spring的缓存支持。

@EnableCaching
@Configuration
public class CacheConfig {
}

42. @EnableScheduling

用于启用调度支持。

@EnableScheduling
@Configuration
public class SchedulingConfig {
}

43. @EnableAspectJAutoProxy

用于启用AspectJ的代理支持。

@EnableAspectJAutoProxy
@Configuration
public class AspectConfig {
}

44. @Aspect

用于定义一个切面。

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        System.out.println("Method execution started");
    }
}

45. @Around

切面建议的环绕通知。

@Around("execution(* com.example.service.*.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
    System.out.println("Method execution started");
    Object proceed = joinPoint.proceed();
    System.out.println("Method execution finished");
    return proceed;
}

46. @Before

切面建议的前置通知。

@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
    System.out.println("Before method: " + joinPoint.getSignature().getName());
}

47. @After

切面建议的后置通知。

@After("execution(* com.example.service.*.*(..))")
public void logAfter(JoinPoint joinPoint) {
    System.out.println("After method: " + joinPoint.getSignature().getName());
}

48. @AfterReturning

切面建议的返回通知。

@AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
public void logAfterReturning(JoinPoint joinPoint, Object result) {
    System.out.println("Method returned: " + result);
}

49. @AfterThrowing

切面建议的异常通知。

@AfterThrowing(pointcut = "execution(* com.example.service.*.*(..))", throwing = "ex")
public void logAfterThrowing(JoinPoint joinPoint, Throwable ex) {
    System.out.println("Method threw an exception: " + ex.getMessage());
}

50. @Scheduled(fixedRateString)

用于从配置文件中读取固定速率的定时任务。

@Scheduled(fixedRateString = "${tasks.fixedRate}")
public void scheduledTask() {
    // 读取配置文件中的值
}

这些注解构成了Spring Boot应用开发的基础,帮助开发者通过简洁的方式完成复杂的业务逻辑和配置。掌握这些注解,能够使我们在使用Spring Boot进行开发时更加得心应手,提高效率。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部