思途Spring学习 0804
SpringBoot 核心概念与开发实践
SpringBoot 是一个基于 Spring 框架的快速开发脚手架,通过约定大于配置的原则简化了传统 Spring 应用的初始化配置。其核心目标是整合 Spring 生态(如 SSM)并支持微服务架构开发。
控制反转(IoC)与依赖注入(DI)
Spring 框架通过 IoC 容器管理对象的生命周期,开发者通过注解声明依赖关系,容器自动完成依赖注入。
- 字段注入:直接通过
@Autowired
注解字段,但缺乏灵活性(如无法注入不可变对象)。 - Setter注入:通过 Setter 方法注入,支持动态修改依赖。
- 构造器注入:推荐方式,保证依赖不可变且完全初始化,可省略
@Autowired
注解。
// 构造器注入示例
@Service
public class UserService {private final UserRepository repository;public UserService(UserRepository repository) {this.repository = repository;}
}
依赖注入注解
@Autowired
- 默认按类型匹配,冲突时用
@Primary
标记首选 Bean。 - 按名称匹配需配合
@Qualifier("beanName")
。
- 默认按类型匹配,冲突时用
@Resource
- JDK 原生注解,支持按名称(
name
)或类型(type
)注入。
- JDK 原生注解,支持按名称(
常用组件注解
@Component
:通用组件标识。@Service
:业务逻辑层。@Repository
:数据访问层(含异常转换)。@Controller
/@RestController
:控制层(后者默认响应 JSON)。
请求映射与参数处理
请求映射注解
@GetMapping
、@PostMapping
等:限定特定 HTTP 方法。@RequestMapping
:支持多方法,需手动指定method
属性。@RequestMapping(value = "/list", method = RequestMethod.GET, produces = "application/json")
参数接收方式
- Servlet API 对象:如
HttpServletRequest
、HttpSession
。 - 基本类型/包装类:通过
@RequestParam
绑定查询参数。public String getUser(@RequestParam(required = false, defaultValue = "1") int id)
- 路径变量:
@PathVariable
提取 RESTful 风格路径参数。@GetMapping("/user/{id}") public String getUser(@PathVariable Long id)
- JavaBean 自动绑定:请求参数名与 Bean 属性匹配时自动填充。
- 请求域模型:
Model
、ModelMap
或Map
存储视图数据。
返回值处理
- 视图名称:返回字符串默认解析为模板路径(如 Thymeleaf)。
public String list(Model model) {model.addAttribute("users", userService.findAll());return "user/list"; // 对应模板文件 user/list.html }
- 重定向/转发:
return "redirect:/user/list"; // 重定向 return "forward:/user/detail"; // 转发
- JSON 响应:
@ResponseBody
或@RestController
将返回值序列化为 JSON。 - ResponseEntity:自定义响应状态码与头部。
@GetMapping("/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) {return ResponseEntity.ok().body(userService.findById(id)); }
SpringBoot 整合 SSM
自动化配置
- 启动器依赖:
spring-boot-starter-web
(Web)、spring-boot-starter-data-jdbc
(JDBC)、mybatis-spring-boot-starter
(MyBatis)。 - 约定目录:
src/main/resources/application.yml
替代传统 XML 配置。
示例配置
# application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/dbusername: rootpassword: 123456
mybatis:mapper-locations: classpath:mapper/*.xml
主启动类
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
通过以上实践,SpringBoot 显著简化了传统 SSM 的配置复杂度,开发者可专注于业务逻辑实现。