您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SpringBoot中常用的注解有哪些
## 目录
1. [引言](#引言)
2. [核心注解](#核心注解)
3. [Web开发相关注解](#web开发相关注解)
4. [数据访问相关注解](#数据访问相关注解)
5. [配置相关注解](#配置相关注解)
6. [测试相关注解](#测试相关注解)
7. [AOP相关注解](#aop相关注解)
8. [定时任务相关注解](#定时任务相关注解)
9. [缓存相关注解](#缓存相关注解)
10. [安全相关注解](#安全相关注解)
11. [其他实用注解](#其他实用注解)
12. [总结](#总结)
---
## 引言
Spring Boot作为当前Java领域最流行的微服务框架,其核心优势之一就是通过注解(Annotation)极大简化了开发配置。本文将系统性地介绍Spring Boot中常用的注解,涵盖从项目启动到各功能模块的开发实践,帮助开发者快速掌握Spring Boot的核心开发技巧。
> **注解的作用**:
> - 替代XML配置,实现声明式编程
> - 自动装配Bean依赖
> - 定义组件生命周期
> - 实现AOP、事务管理等横切关注点
---
## 核心注解
### 1. @SpringBootApplication
**组合注解**,包含以下三个核心功能:
```java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {}
在配置类中声明方法返回值作为Bean:
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
}
自动注入依赖(推荐使用构造函数注入):
@Service
public class UserService {
private final UserRepository repository;
@Autowired // Spring 4.3+ 可省略
public UserService(UserRepository repository) {
this.repository = repository;
}
}
注解 | 适用场景 |
---|---|
@Component | 通用组件 |
@Service | 业务逻辑层 |
@Repository | 数据访问层 |
@Controller | Web控制器 |
@RestController | REST API控制器 |
注解 | HTTP方法 | 示例 |
---|---|---|
@RequestMapping | 通用 | @RequestMapping("/api") |
@GetMapping | GET | @GetMapping("/users") |
@PostMapping | POST | @PostMapping("/users") |
@PutMapping | PUT | @PutMapping("/users/{id}") |
@DeleteMapping | DELETE | @DeleteMapping("/users/{id}") |
@GetMapping("/users/{id}")
public User getUser(
@PathVariable Long id,
@RequestParam(required = false) String name,
@RequestBody UserDTO userDto,
@RequestHeader("User-Agent") String userAgent) {
// ...
}
@RestController
public class UserController {
@GetMapping("/users")
public ResponseEntity<List<User>> listUsers() {
return ResponseEntity.ok().header("X-Custom","value").body(users);
}
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/users")
public void createUser(@Valid @RequestBody User user) {
// ...
}
}
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleNotFound(ResourceNotFoundException ex) {
return new ErrorResponse(ex.getMessage());
}
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50)
private String username;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Order> orders;
}
@Service
@Transactional
public class OrderService {
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
timeout = 30)
public void placeOrder(Order order) {
// 数据库操作
}
}
@Configuration
@PropertySource("classpath:app.properties")
public class AppConfig {
@Value("${app.page.size:10}")
private int pageSize;
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
return new HikariDataSource();
}
}
@Configuration
@ConditionalOnClass(DataSource.class)
@ConditionalOnProperty(name = "datasource.enabled", havingValue = "true")
public class DataSourceAutoConfig {
// ...
}
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserService userService;
@Test
@DisplayName("测试获取用户列表")
void shouldReturnUserList() throws Exception {
mockMvc.perform(get("/users"))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].username").value("admin"));
}
}
@Aspect
@Component
public class LoggingAspect {
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayer() {}
@Before("serviceLayer()")
public void logMethodCall(JoinPoint jp) {
Logger.info("调用方法: " + jp.getSignature());
}
@Around("@annotation(com.example.audit.Loggable)")
public Object logExecutionTime(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
Logger.info("方法执行耗时: " + (System.currentTimeMillis() - start));
return result;
}
}
@Configuration
@EnableScheduling
public class ScheduleConfig {
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("定时任务执行: " + LocalDateTime.now());
}
@Scheduled(cron = "0 15 10 * * ?")
public void dailyJob() {
// 每天上午10:15触发
}
}
@Service
@CacheConfig(cacheNames = "users")
public class UserService {
@Cacheable(key = "#id")
public User getUser(Long id) {
return repository.findById(id).orElse(null);
}
@CachePut(key = "#user.id")
public User updateUser(User user) {
return repository.save(user);
}
@CacheEvict(key = "#id")
public void deleteUser(Long id) {
repository.deleteById(id);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin();
}
}
@RestController
@RequestMapping("/api")
public class ApiController {
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public String adminOnly() {
return "Admin Area";
}
}
@Service
public class AsyncService {
@Async
public CompletableFuture<String> asyncTask() {
// 长时间运行的任务
return CompletableFuture.completedFuture("Result");
}
}
public class UserDTO {
@NotBlank
@Size(min = 3, max = 20)
private String username;
@Email
private String email;
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$")
private String password;
}
@RestController
@Api(tags = "用户管理API")
public class UserController {
@ApiOperation("获取用户列表")
@GetMapping("/users")
public List<User> listUsers() {
// ...
}
}
Spring Boot通过丰富的注解体系,实现了以下优势: 1. 配置简化:减少XML配置90%以上 2. 开发效率:快速构建生产级应用 3. 可维护性:清晰的代码组织结构 4. 生态整合:轻松集成各种中间件
建议开发者: - 理解注解背后的实现原理(如自动配置机制) - 根据业务场景选择合适的注解组合 - 关注Spring Boot版本更新带来的新注解特性
最佳实践:对于企业级应用,建议建立自定义注解规范,如
@BusinessLog
用于统一业务日志记录。
”`
注:本文实际约4500字,要达到6650字需要进一步扩展以下内容: 1. 每个注解的详细使用场景和示例 2. 常见问题排查方案 3. 性能优化建议 4. 与其他框架的整合案例 5. 自定义注解开发指南 需要补充内容可告知具体方向。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。