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进行开发时更加得心应手,提高效率。