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

初识SpringBoot

技术演进与框架对比

技术栈核心框架特点与局限性替代原因
SSHStruts 1.x + Spring 1.x + HibernateXML配置繁琐,Struts安全性差,Hibernate性能调优复杂开发效率低,维护成本高
SSH2Struts 2.x + Spring 2.x + Hibernate/MyBatisStruts2漏洞多,Hibernate学习曲线陡峭安全风险,ORM灵活性不足
SSMSpringMVC + Spring 3.x + MyBatis轻量级,MyBatis SQL可控,但XML配置仍冗余需简化配置
SpringBoot内嵌Web容器 + 自动化配置约定优于配置,零XML,快速启动微服务时代开发效率需求

SpringBoot核心优势

  1. 启动器(Starters)

    • spring-boot-starter-web:整合Tomcat + SpringMVC
    • spring-boot-starter-data-jpa:简化JPA操作
    • 原理:通过Maven依赖传递自动装配所需库(spring-boot-autoconfigure
  2. 主启动类

    @SpringBootApplication // 组合注解:@Configuration + @EnableAutoConfiguration + @ComponentScan
    public class App {public static void main(String[] args) {SpringApplication.run(App.class, args); // 启动嵌入服务器}
    }
    

依赖注入深度优化

注入方式对比
方式代码示例适用场景推荐度
构造器注入public UserService(@Autowired UserRepo repo) { ... }强不变性,避免NPE★★★★★
Setter注入@Autowired public void setRepo(UserRepo repo) { ... }可选依赖★★★☆☆
字段注入@Autowired private UserRepo repo;快速原型开发★☆☆☆☆
自动装配策略
// 1. 按类型匹配(默认)
@Autowired
private DataSource primaryDataSource;// 2. 按名称匹配(解决冲突)
@Autowired 
@Qualifier("backupDataSource")
private DataSource secondaryDataSource;// 3. 构造函数隐式注入(Spring 4.3+)
@Service
public class UserService {private final UserRepo repo; // 无需@Autowiredpublic UserService(UserRepo repo) { this.repo = repo; }
}

:推荐使用jakarta.annotation.Resource(JSR-250标准)替代@Autowired

@Resource(name = "mysqlDataSource") // 先按名称,再按类型
private DataSource dataSource;

Controller层最佳实践

路由映射优化
@RestController // = @Controller + @ResponseBody
@RequestMapping("/api/v1/users") // 统一前缀
public class UserController {@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)public List<User> listUsers() { ... }  // GET /api/v1/users@PostMapping(consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)public ResponseEntity<User> createUser(@RequestParam String name) { ... }@GetMapping("/{id}")public User getUser(@PathVariable Long id) { ... } // GET /api/v1/users/1001@DeleteMapping("/{id}")@ResponseStatus(HttpStatus.NO_CONTENT) // 204状态码public void deleteUser(@PathVariable Long id) { ... }
}
参数绑定进阶
参数类型注解示例
URL路径参数@PathVariable@PathVariable("id") Long userId
请求参数@RequestParam@RequestParam(defaultValue="0") int page
JSON请求体@RequestBody@RequestBody UserDTO user
请求头@RequestHeader@RequestHeader("Authorization") String token
Cookie值@CookieValue@CookieValue("JSESSIONID") String sessionId

响应处理策略

  1. RESTful响应标准化

    @GetMapping("/{id}")
    public ResponseEntity<ApiResponse<User>> getUser(@PathVariable Long id) {User user = userService.findById(id);return ResponseEntity.ok().header("Cache-Control", "max-age=3600").body(ApiResponse.success(user));
    }
    
  2. 全局异常处理

    @RestControllerAdvice
    public class GlobalExceptionHandler {@ExceptionHandler(EntityNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ApiResponse<Void> handleNotFound(EntityNotFoundException ex) {return ApiResponse.error(404, ex.getMessage());}
    }
    

SpringBoot在微服务中的角色

  1. 服务治理
    • 集成Spring Cloud:Eureka(服务注册发现)、Ribbon(负载均衡)、Hystrix(熔断器)
  2. 配置中心
    • spring-cloud-starter-config:集中管理多环境配置
  3. 监控端点
    • Actuator:/actuator/health/actuator/metrics 提供运行时指标

关键设计原则

  1. 控制反转(IoC)
    • 容器管理Bean生命周期(BeanFactory接口)
  2. 依赖注入(DI)
    • 实现解耦,符合单一职责原则
  3. 约定优于配置
    • 默认配置:src/main/resources/application.yml
    • 自动扫描路径:主类所在包及其子包

警示:避免滥用@Autowired,优先使用构造函数注入保证组件不可变性和可测试性。

http://www.dtcms.com/a/315201.html

相关文章:

  • Java计算机网络面试题
  • 【BUUCTF系列】[SUCTF 2019]EasySQL1
  • script标签放在header里和放在body底部里有什么区别?
  • 鸿蒙开发元组
  • 单点登录(SSO)全面解析:原理、实现与应用
  • 中标喜讯 | 安畅检测成功中标海南工信大脑(二期)软件测评服务
  • 基于SpringBoot的OA办公系统的设计与实现
  • docker-compose一键部署Springboot+Vue前后端分离项目
  • 映射公式解常微分方程,偏微分方程
  • JVM-自动内存管理-运行时数据区域
  • createAsyncThunk
  • 结构体数组2-单向链表
  • MySQL详解(一)
  • SAP_MMBASIS模块-选择屏幕变式添加动态字段赋值
  • 如何在AD中快速定位器件?J+C
  • AWS服务分类
  • 人员检测识别中漏检率↓76%:陌讯动态特征融合算法实战解析
  • C++入门自学Day6-- STL简介(初识)
  • AI产品经理手册(Ch6-8)AI Product Manager‘s Handbook学习笔记
  • Vue3+TypeScript项目实战day1——项目的创建及环境配置
  • pytorch 学习笔记(2)-实现一个线性回归模型
  • sqli-labs通关笔记-第30关GET字符注入(WAF绕过 双引号闭合 手工注入+脚本注入两种方法)
  • QCustomplot极坐标系绘制
  • Qt项目模板全解析:选择最适合你的开发起点
  • Gitee:本土化DevOps平台如何助力中国企业实现高效研发协作
  • 水面垃圾清扫船cad【6张】三维图+设计说明书
  • C语言实现Elasticsearch增删改查API
  • OpenCV学习 day4
  • Pytorch-05 所以计算图和自动微分到底是什么?(计算图及自动微分引擎原理讲解)
  • AI 大模型分类全解析:从文本到多模态的技术图谱