Spring 常見(jiàn)注解
?? @Configuration 和 @Import 的核心區(qū)別
| 特性 | @Configuration |
@Import |
|---|---|---|
| 主要目的 | 標(biāo)記一個(gè)類(lèi)是 Java 配置類(lèi),它是 Bean 定義的來(lái)源/容器。 | 將一個(gè)或多個(gè)配置類(lèi)或組件類(lèi)引入到當(dāng)前的配置類(lèi)中。 |
| 角色 | 生產(chǎn)者 (Producer) 和 容器 (Container)。 | 引入者 (Importer) 或 聚合器 (Aggregator)。 |
| 通常用法 | 用于定義 @Bean 方法來(lái)創(chuàng)建和配置 Spring Bean。 |
用來(lái)合并、分組或有選擇性地加載其他配置。 |
| 必須標(biāo)記 | 必須標(biāo)記在一個(gè)類(lèi)上。 | 必須標(biāo)記在另一個(gè) @Configuration 類(lèi)(或 @Component 等)上。 |
| 引入內(nèi)容 | 它自己包含 bean 定義(通過(guò) @Bean 或 @ComponentScan)。 |
引入其他類(lèi)(通常是 @Configuration 類(lèi),也可以是普通的 @Component 類(lèi)、ImportSelector 或 ImportBeanDefinitionRegistrar)。 |
詳細(xì)解釋
1. @Configuration (配置類(lèi))
@Configuration 的作用是告訴 Spring 容器:這是一個(gè)包含 bean 定義的類(lèi)。
- 定義 Bean: 你可以在這個(gè)類(lèi)中使用
@Bean方法來(lái)手動(dòng)實(shí)例化和配置 bean。@Configuration public class AppConfig { @Bean public UserService userService() { return new UserService(); } } - 配置核心: 在 Java 配置方式中,它就是配置信息的中心。Spring 容器會(huì)掃描并處理被這個(gè)注解標(biāo)記的類(lèi),從而將其中定義的 bean 注冊(cè)到容器中。
2. @Import (引入)
@Import 的作用是讓一個(gè) @Configuration 類(lèi)能夠引入其他的配置類(lèi)或組件類(lèi)。它是一種實(shí)現(xiàn)配置模塊化和聚合的機(jī)制。
- 聚合配置: 當(dāng)你的應(yīng)用有多個(gè)獨(dú)立的配置模塊(如數(shù)據(jù)庫(kù)配置、安全配置、Web 配置)時(shí),你可以使用
@Import將它們集中到一個(gè)主配置類(lèi)中。
這樣,你只需要將@Configuration @Import({DatabaseConfig.class, SecurityConfig.class}) // 將其他配置類(lèi)引入 public class MainAppConfig { // 主應(yīng)用的其他配置或 Bean 定義 }MainAppConfig注冊(cè)到 Spring 容器,所有被引入的配置類(lèi)也會(huì)被加載。 - 引入普通組件: 從 Spring 3.1 開(kāi)始,
@Import不僅可以引入@Configuration類(lèi),也可以直接引入普通的組件類(lèi)(如沒(méi)有@Component或@Service注解的 POJO 或 Service 類(lèi))。被引入的組件類(lèi)也會(huì)被注冊(cè)為 Spring bean。@Configuration @Import(UserService.class) // 直接將 UserService 類(lèi)注冊(cè)為一個(gè) Bean public class ComponentImportConfig { // ... }

浙公網(wǎng)安備 33010602011771號(hào)