1. Spring 核心注解
Spring Boot 是基于 Spring 框架的,所以核心注解依然適用。
? 常見核心注解
@Component
表示一個通用組件,Spring 會自動掃描并注入到容器中。@Component public class MyComponent {public void sayHello() {System.out.println("Hello from Component!");} }
@Service
表示業務邏輯層的組件(語義化,更適合 Service 層)。@Service public class UserService {public String getUser() {return "User";} }
@Repository
表示持久層的組件(DAO 層),會額外處理數據庫相關異常。@Repository public class UserRepository {public void saveUser() {System.out.println("User saved");} }
@Controller / @RestController
@Controller
:返回視圖(模板引擎,如 Thymeleaf)。@RestController
:等價于@Controller + @ResponseBody
,返回 JSON 數據。
@RestController @RequestMapping("/api") public class UserController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";} }
@Autowired
自動注入 Bean(默認按類型匹配)。@RestController public class HelloController {@Autowiredprivate UserService userService; }
2. Spring Boot 特有注解
? 啟動 & 配置類
@SpringBootApplication
Spring Boot 的核心啟動注解,相當于:@Configuration
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);} }
@EnableAutoConfiguration
開啟自動配置(Spring Boot 會根據依賴自動配置 Bean)。@ConfigurationProperties
將配置文件(application.yml
/application.properties
)綁定到 Java 類上。@Component @ConfigurationProperties(prefix = "app") public class AppProperties {private String name;private String version;// getter/setter }
@Value
直接注入配置屬性。@Value("${app.name}") private String appName;
3. Web 注解
? 請求映射
@RequestMapping:定義路徑映射,可用于類和方法。
@GetMapping / @PostMapping / @PutMapping / @DeleteMapping:更具體的 HTTP 方法注解。
@RestController @RequestMapping("/users") public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id) {return "User " + id;} }
? 參數綁定
@PathVariable:獲取路徑參數。
@RequestParam:獲取請求參數(?key=value)。
@RequestBody:綁定請求體 JSON 到對象。
@RequestHeader:獲取請求頭。
@PostMapping("/create") public String createUser(@RequestBody User user,@RequestHeader("token") String token) {return "User created: " + user.getName() + ", token=" + token; }
4. 數據驗證注解(JSR-303)
常用于參數校驗,結合 @Valid
或 @Validated
使用。
@NotNull:不能為空
@NotBlank:字符串不能為空
@Size(min, max):限制長度
@Email:校驗郵箱
@Pattern:正則校驗
public class UserDTO {@NotBlank(message = "用戶名不能為空")private String username;@Email(message = "郵箱格式不正確")private String email; }@PostMapping("/register") public String register(@Valid @RequestBody UserDTO user) {return "注冊成功"; }
5. 事務 & 異步
@Transactional:開啟事務管理。
@Service public class OrderService {@Transactionalpublic void createOrder() {// 數據庫操作} }
@Async:異步執行方法。
@Service public class EmailService {@Asyncpublic void sendEmail(String to) {System.out.println("Sending email to " + to);} }
6. 測試相關注解
@SpringBootTest:啟動完整 Spring Boot 上下文。
@WebMvcTest:僅啟動 Web 層。
@MockBean:模擬一個 Bean(用于單元測試)。
@SpringBootTest class UserServiceTest {@Autowiredprivate UserService userService; }
7. 條件注解(高級用法)
Spring Boot 提供條件裝配,按環境決定是否加載 Bean。
@ConditionalOnProperty:配置屬性滿足條件時加載。
@ConditionalOnMissingBean:當容器中沒有某個 Bean 時才加載。
@Profile:指定環境下生效(如
dev
,prod
)。@Service @Profile("dev") public class DevUserService implements UserService {}@Service @Profile("prod") public class ProdUserService implements UserService {}
8. 其他常用注解
@Bean:在
@Configuration
類中定義 Bean。@Primary:多個 Bean 時,標記優先注入。
@Qualifier:按名稱指定 Bean。
@Order:指定加載順序。
👉 總結:
核心注解(@Component, @Service, @Controller…)用于 Bean 管理。
Spring Boot 特有注解(@SpringBootApplication, @ConfigurationProperties…)用于簡化配置。
Web 注解 處理請求映射和參數綁定。
事務、異步、測試、條件注解 提供更高級的控制。