springboot之自動裝配全過程
Spring Boot 實(shí)現(xiàn)自動裝配的關(guān)鍵在于其自動配置機(jī)制(Auto-Configuration)和基于注解的配置。以下是 Spring Boot 實(shí)現(xiàn)自動裝配的主要原理和步驟:
1. @SpringBootApplication 注解
@SpringBootApplication 是一個組合注解,它包含了三個重要的注解:@EnableAutoConfiguration、@ComponentScan 和 @Configuration。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}@EnableAutoConfiguration:啟用 Spring Boot 的自動配置機(jī)制。@ComponentScan:啟用組件掃描,以便找到帶有@Component、@Service、@Repository、@Controller等注解的 Spring 組件。@Configuration:表明這個類是一個配置類,可以包含@Bean定義。
2. 自動配置(Auto-Configuration)
@EnableAutoConfiguration 注解觸發(fā)自動配置。
Spring Boot 會根據(jù)類路徑中的依賴、屬性文件中的配置以及其他環(huán)境變量來判斷并自動配置應(yīng)用所需的 Bean。
自動配置的實(shí)現(xiàn)原理
Spring Boot 的自動配置機(jī)制依賴于 spring.factories 文件,該文件位于 META-INF 目錄下。
這個文件列出了所有的自動配置類(Auto-Configuration Classes)。
例如,Spring Boot 的 spring-boot-autoconfigure JAR 包中的 spring.factories 文件部分內(nèi)容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ ...
這些自動配置類會在 Spring 應(yīng)用上下文初始化時被加載,并根據(jù)條件自動配置相應(yīng)的 Bean。
3. 條件裝配
自動配置類通常使用條件注解(Conditional Annotations)來控制 Bean 的裝配。這些注解包括:
@ConditionalOnClass:只有在指定的類在類路徑上存在時才會裝配 Bean。@ConditionalOnMissingBean:只有在指定的 Bean 不存在時才會裝配 Bean。@ConditionalOnProperty:只有在指定的屬性存在并具有特定值時才會裝配 Bean。
例如,DataSourceAutoConfiguration 類:
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnMissingBean(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public DataSource dataSource(DataSourceProperties properties) {
// 配置和創(chuàng)建 DataSource
return properties.initializeDataSourceBuilder().build();
}
}4. 組件掃描(Component Scan)
@ComponentScan 注解啟用組件掃描,Spring 會掃描指定包及其子包中的所有組件(帶有 @Component、@Service、@Repository、@Controller 等注解的類),并將它們注冊為 Spring Bean。
@SpringBootApplication
@ComponentScan(basePackages = "com.example.myapp")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}5. 配置類(Configuration Class)
@Configuration 注解用于定義配置類,這些類可以包含一個或多個 @Bean 方法。
每個 @Bean 方法定義了一個 Bean,并將其注冊到 Spring 應(yīng)用上下文中。
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}6. 使用 @Autowired 注入依賴
Spring 通過 @Autowired 注解實(shí)現(xiàn)依賴注入。
@Autowired 可以應(yīng)用于構(gòu)造器、方法和字段,Spring 會自動注入相應(yīng)的 Bean。
@Service
public class MyService {
private final MyRepository myRepository;
@Autowired
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
// 或者通過字段注入
@Autowired
private MyRepository myRepository;
}總結(jié)
Spring Boot 通過一系列注解和條件配置實(shí)現(xiàn)了自動裝配機(jī)制,使得開發(fā)者無需手動配置大量的 XML 文件或 Java 配置類。
自動配置機(jī)制利用 spring.factories 文件中的自動配置類,并結(jié)合條件注解和組件掃描,實(shí)現(xiàn)了靈活且強(qiáng)大的自動裝配功能。
這樣,開發(fā)者可以專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而無需處理繁瑣的配置細(xì)節(jié)。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文帶你吃透JSP增刪改查實(shí)戰(zhàn)案例詳細(xì)解讀
這篇文章主要為大家詳細(xì)介紹了JSP中增刪改查實(shí)戰(zhàn)案例的相關(guān)知識,文中的示例代碼講解現(xiàn)象,具有一定的借鑒價值,感興趣的小伙伴可以了解一下2023-03-03
Springboot整合Netty實(shí)現(xiàn)RPC服務(wù)器的示例代碼
這篇文章主要介紹了Springboot整合Netty實(shí)現(xiàn)RPC服務(wù)器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
解決SpringMVC接收不到ajaxPOST參數(shù)的問題
今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Java switch 語句如何使用 String 參數(shù)
這篇文章主要介紹了Java switch 語句如何使用 String 參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2019-06-06
Java正則表達(dá)式實(shí)現(xiàn)在文本中匹配查找換行符的方法【經(jīng)典實(shí)例】
這篇文章主要介紹了Java正則表達(dá)式實(shí)現(xiàn)在文本中匹配查找換行符的方法,結(jié)合具體實(shí)例分析了java正則匹配查找換行符的實(shí)現(xiàn)技巧與匹配模式相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-04-04
Java中各類日期和時間轉(zhuǎn)換超詳析總結(jié)(Date和LocalDateTime相互轉(zhuǎn)換等)
這篇文章主要介紹了Java中日期和時間處理的幾個階段,包括java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp、java.util.Calendar和java.util.GregorianCalendar等類,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
微信公眾平臺開發(fā)實(shí)戰(zhàn)Java版之微信獲取用戶基本信息
這篇文章主要介紹了微信公眾平臺開發(fā)實(shí)戰(zhàn)Java版之微信獲取用戶基本信息 的相關(guān)資料,需要的朋友可以參考下2015-12-12

