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) {
// 处理运行时异常
}
}