当前位置: 首页 > news >正文

Spring Boot常用注解全解析:从入门到实战

🌱 Spring Boot常用注解全解析:从入门到实战

#SpringBoot核心 #注解详解 #开发技巧 #高效编程


一、核心启动与配置注解

1. @SpringBootApplication

作用:标记主启动类,整合了@Configuration@EnableAutoConfiguration@ComponentScan
示例

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

2. @Configuration 与 @Bean

作用:声明配置类,定义Bean
示例

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

二、Web开发相关注解

1. @RestController

作用:组合@Controller@ResponseBody,用于返回JSON/XML数据
示例

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

2. @RequestMapping 与 HTTP方法注解

作用:映射HTTP请求路径与方法

@PostMapping("/create")  
public User createUser(@RequestBody User user) {  return userService.save(user);  
}  @PutMapping("/update/{id}")  
public User updateUser(@PathVariable Long id, @RequestBody User user) {  return userService.update(id, user);  
}  

三、依赖注入与Bean管理

1. @Autowired

作用:自动注入依赖,默认按类型匹配
示例

@Service  
public class UserService {  @Autowired  private UserRepository userRepository;  
}  

2. @Component系列注解

注解适用场景
@Service业务逻辑层
@Repository数据访问层(JPA)
@ControllerMVC控制器(返回视图)

四、数据访问与JPA注解

1. @Entity 与 @Table

作用:定义JPA实体类与数据库表映射
示例

@Entity  
@Table(name = "t_users")  
public class User {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id;  private String name;  
}  

2. @Repository

作用:标记数据访问层,自动处理数据库异常

@Repository  
public interface UserRepository extends JpaRepository<User, Long> {  // 自定义查询方法  User findByName(String name);  
}  

五、配置与属性绑定

1. @Value

作用:注入配置文件中的属性值
示例

# application.properties  
app.max.retry=3  
@Service  
public class PaymentService {  @Value("${app.max.retry}")  private int maxRetry;  
}  

2. @ConfigurationProperties

作用:批量绑定配置文件到Java对象

@ConfigurationProperties(prefix = "app")  
@Data  
public class AppConfig {  private int maxRetry;  private String apiKey;  
}  

六、条件注解

1. @ConditionalOnProperty

作用:根据配置属性决定是否创建Bean
示例

@Bean  
@ConditionalOnProperty(name = "app.cache.enabled", havingValue = "true")  
public CacheManager cacheManager() {  return new RedisCacheManager();  
}  

2. @Profile

作用:指定Bean在特定Profile下生效

@Bean  
@Profile("prod")  
public DataSource prodDataSource() {  // 生产环境数据源  
}  

七、AOP与事务管理

1. @Aspect 与 @Around

作用:实现切面编程,增强方法逻辑
示例

@Aspect  
@Component  
public class LogAspect {  @Around("execution(* com.example.service.*.*(..))")  public Object logExecutionTime(ProceedingJoinPoint pjp) throws Throwable {  long start = System.currentTimeMillis();  Object result = pjp.proceed();  System.out.println("方法执行耗时: " + (System.currentTimeMillis() - start) + "ms");  return result;  }  
}  

2. @Transactional

作用:声明式事务管理

@Service  
public class OrderService {  @Transactional  public void placeOrder(Order order) {  // 数据库操作  }  
}  

八、测试相关注解

1. @SpringBootTest

作用:加载完整应用上下文进行集成测试

@SpringBootTest  
class UserServiceTest {  @Autowired  private UserService userService;  @Test  void testFindUser() {  User user = userService.findById(1L);  assertNotNull(user);  }  
}  

2. @MockBean

作用:注入Mock对象,用于单元测试

@SpringBootTest  
class PaymentServiceTest {  @MockBean  private PaymentGateway paymentGateway;  @Test  void testPayment() {  when(paymentGateway.process(any())).thenReturn(true);  // 测试逻辑  }  
}  

总结

Spring Boot通过丰富的注解极大简化了开发流程:

  • 启动类@SpringBootApplication
  • Web开发@RestController@GetMapping
  • 数据访问@Entity@Repository
  • 依赖管理@Autowired@Component
  • 配置管理@Value@ConfigurationProperties

正确使用这些注解,能快速构建高效、可维护的Spring Boot应用。建议结合官方文档与实际项目加深理解! 🚀

相关文章:

  • 17.RSS体系建设打造信息百川入海
  • accelerate并行计算:训练环境和训练参数的配置字典
  • 面试题--随机(一)
  • 【操作系统原理03】处理机调度与死锁
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day15
  • 【LeetCode 热题 100】双指针 系列
  • 基于有效样本数的类别平衡损失 (Class-Balanced Loss, CVPR 2019)
  • 量化交易 - RSRS(阻力支撑相对强度)策略研究 - 源码
  • 递归实现归并排序
  • RenderStage::runCameraSetUp
  • 对象存储概述
  • 《擦除序列》线性时间做法题解
  • 点云(Point Cloud)介绍
  • 可发1区的超级创新思路(python 、MATLAB实现):基于区域注意力双通道MABMA的时间序列预测模型
  • Megatron-Core 进行大规模语言模型(LLM)训练【专题2】
  • Vivado比特流生成、下载及板级验证操作步骤
  • 【C++算法】64.字符串_字符串相乘
  • 服务部署丨通过Docker部署AutoBangumi+qBittorrent实现自动追番
  • sql之DML(insert、delete、truncate、update、replace))
  • 前端工程化之自动化测试
  • 51岁国家移民管理局移民事务服务中心联络部副主任林艺聪逝世
  • 加拿大温哥华发生驾车冲撞人群事件,加拿大总理发声
  • 印方称与巴基斯坦军队在克什米尔交火
  • 张家界乒乓球公开赛设干部职级门槛引关注,回应:仅限嘉宾组
  • 国家统计局:一季度规模以上工业企业利润延续持续恢复态势
  • 官方披露:临汾昔日“明星官员”宿青平已于去年落马