在 Spring 配置文件中啟用組件掃描,指定基礎包路徑(包含子包):
<context:component-scan base-package="cn.test"/>
| 註解 | 用途 | 說明 |
|---|---|---|
@Configuration | 配置類 | 標識該類為 Spring 配置類,內部 @Bean 方法定義的 Bean 將註冊到容器 |
@Component | 通用組件 | 泛指組件,當難以歸類時使用 |
@Service | 業務層 | 標識業務邏輯層組件,語義化分層 |
@Repository | 數據訪問層 | 標識 DAO 組件,自動進行異常轉換 |
@Controller | 控制層 | 標識控制層組件(如 Spring MVC Controller) |
| 註解 | 作用 | 示例 |
|---|---|---|
@Scope | 指定 Bean 作用域 | @Scope("prototype")、@Scope("request") |
@Lazy(true) | 延遲初始化 | 單例 Bean 默認啟動時創建,加此註解延遲到首次使用 |
@PostConstruct | 初始化回調 | Bean 創建並依賴注入完成後調用 |
@PreDestroy | 銷毀回調 | 容器關閉前調用,釋放資源 |
@DependsOn | 依賴順序 | 強制指定其他 Bean 先初始化/銷毀 |
@Primary | 首選 Bean | 多個候選 Bean 時作為默認注入目標 |
@Autowired
private UserService userService;
// 多實例時結合 @Qualifier 按名稱注入
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
// 默認按字段名匹配 Bean 名稱
@Resource
private UserService userService;
// 顯式指定名稱
@Resource(name = "userServiceImpl")
private UserService userService;
區別:@Autowired 默認 byType,@Resource 默認 byName;@Resource 是 JSR-250 標準,@Autowired 是 Spring 專有。
| 註解 | 用途 |
|---|---|
@Conditional | 條件裝配,滿足條件才註冊 Bean |
@Profile | 環境隔離,如 dev/test/prod |
@PropertySource | 載入外部屬性文件 |
@Value | 注入配置屬性值,支持 SpEL |
@Async
public CompletableFuture doAsyncTask() {
// 異步執行邏輯
return CompletableFuture.completedFuture("result");
}
需配置線程池並啟用異步支持:
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10"/>
<property name="maxPoolSize" value="300"/>
</bean>
<task:annotation-driven/>
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨 2 點
public void dailyCleanup() { ... }
@Scheduled(fixedRate = 5000) // 每 5 秒執行一次
public void periodicCheck() { ... }
| 註解 | 用途 |
|---|---|
@RequestMapping | 請求映射(類/方法級) |
@GetMapping/@PostMapping | HTTP 方法縮寫映射 |
@RequestParam | 綁定請求參數 |
@PathVariable | 綁定路徑變量 |
@RequestBody | 綁定請求體(JSON/XML) |
@ResponseBody | 響應體直接寫入 |
@RestController | @Controller + @ResponseBody |
@ExceptionHandler | 異常處理方法 |
@ModelAttribute | 模型屬性綁定 |
@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
readOnly = false,
timeout = 30,
rollbackFor = {Exception.class}
)
public void businessMethod() { ... }
@Autowired private Foo foo; 難以測試且隱藏依賴<context:annotation-config/> 或 Spring Boot 自動配置生效Spring 註解極大簡化了配置複雜度,掌握核心註解的用法、組合規則與最佳實踐,能顯著提升開發效率與代碼可維護性。建議收藏本速查表,實戰中按需查閱。