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 的配置復雜度,開發者可專注于業務邏輯實現。