Spring 框架中常用注解的詳細解釋與應用場景,結合核心功能和實際開發需求進行分類說明:
1.組件定義注解
1.1 @Component
-
作用:通用注解,將普通 Java 類標記為 Spring 管理的 Bean,由容器實例化和管理,相當于 XML 中的
<bean>
標簽。 -
應用場景:非特定層次(如工具類、配置類)的組件聲明。
-
示例:
@Componentpublic class MyComponent { /* ... */ }
1.2 分層組件注解
@Controller
:標記控制層(Web 層),處理 HTTP 請求并返回視圖或數據。@Service
:標記服務層(業務邏輯層),封裝復雜業務邏輯。@Repository
:標記數據訪問層(DAO 層),處理數據庫操作,支持異常轉換(如 SQL 異常轉 Spring DataAccessException)。- 區別:三者均為
@Component
的特化版本,通過語義化區分層次,增強代碼可讀性。
1.3 @RestController
-
作用:
@Controller
+@ResponseBody
的組合,用于 RESTful API 開發,方法返回值直接序列化為 JSON/XML。 -
示例:
@RestControllerpublic class UserController { @GetMapping("/user")public User getUser() { /* ... */ }}
2.依賴注入注解
2.1 @Autowired
-
作用:按類型(byType)自動注入依賴,支持字段、構造器、方法注入。若存在多個同類型 Bean,需配合
@Qualifier
指定名稱。 -
屬性:
required=false
允許依賴為空。 -
示例:
@Servicepublic class UserService {@Autowiredprivate UserRepository userRepo;}
2.2 @Resource
- 作用:按名稱(byName)注入,屬于 JSR-250 規范。默認按字段名匹配,若無匹配則按類型注入。
- 與
@Autowired
區別:@Autowired
是 Spring 特有,默認按類型注入,需配合@Qualifier
指定名稱。@Resource
是 Java EE 標準,更靈活,適用于多實現類場景。
2.3 @Value
-
作用:注入配置文件(如
application.properties
)中的屬性值,支持表達式和默認值。 -
示例:
@Value("${app.timeout:30}")private int timeout;
3.配置類與自動裝配
3.1 @Configuration
-
作用:標記配置類,替代 XML 配置文件,定義 Bean 的創建邏輯。
-
示例:
@Configurationpublic class AppConfig {@Beanpublic DataSource dataSource() { /* ... */ }}
3.2 @ComponentScan
- 作用:指定 Spring 掃描的包路徑,自動注冊
@Component
及其派生注解的類為 Bean。 - 與
@SpringBootApplication
關系:@SpringBootApplication
包含@ComponentScan
,默認掃描啟動類所在包及其子包。
3.3 @Bean
-
作用:在配置類中定義 Bean,常用于第三方庫(如數據庫連接池)的實例化。
-
示例:
@Configurationpublic class DataSourceConfig {@Beanpublic DataSource druidDataSource() { return new DruidDataSource(); }}
4.Spring MVC 相關注解
4.1 @RequestMapping
-
作用:映射 HTTP 請求到控制器方法,支持類和方法級路徑,可指定請求方法(GET/POST 等)。
-
簡化注解:
@GetMapping
、@PostMapping
等,語義更明確。 -
示例:
@Controller@RequestMapping("/api")public class ApiController {@GetMapping("/users")public String listUsers() { /* ... */ }}
4.2 參數綁定注解
@PathVariable
:綁定 URL 路徑變量到方法參數。
@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) { /* ... */ }
-
@RequestParam
:綁定請求參數到方法參數,支持默認值。 -
@RequestBody
:將請求體 JSON 反序列化為 Java 對象。
5.條件注解與高級特性
5.1 @Conditional
系列
- 作用:根據條件動態裝配 Bean,如
@ConditionalOnClass
(類路徑存在時生效)、@ConditionalOnMissingBean
(容器中無該 Bean 時生效)。 - 應用場景:Spring Boot 自動配置的核心機制。
5.2 AOP 相關注解
@Aspect
:定義切面類。@Before
/@After
/@Around
:定義通知類型,控制切面執行時機。
5.3 生命周期回調
@PostConstruct
:Bean 初始化后執行的方法。@PreDestroy
:Bean 銷毀前執行的方法。
6.Spring Boot 核心注解
6.1 @SpringBootApplication
- 組成:
@Configuration
+@EnableAutoConfiguration
+@ComponentScan
,標記主啟動類。 - 作用:啟用自動配置、組件掃描和配置類定義。
6.2 @EnableAutoConfiguration
- 原理:根據類路徑依賴自動配置 Bean(如引入
spring-boot-starter-web
自動配置 Tomcat 和 Spring MVC)。
7.總結
- 組件分層:通過
@Controller
、@Service
、@Repository
明確代碼職責。 - 依賴管理:優先使用
@Autowired
按類型注入,多實現場景用@Qualifier
或@Resource
。 - 配置簡化:
@Configuration
+@Bean
替代 XML,@SpringBootApplication
整合啟動邏輯。 - RESTful 開發:
@RestController
+@RequestBody
/@PathVariable
構建 API。
通過合理使用這些注解,可顯著減少配置代碼,提升開發效率和代碼可維護性。