springboot之自動裝配全過程
Spring Boot 實現(xiàn)自動裝配的關(guān)鍵在于其自動配置機制(Auto-Configuration)和基于注解的配置。以下是 Spring Boot 實現(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 的自動配置機制。@ComponentScan
:啟用組件掃描,以便找到帶有@Component
、@Service
、@Repository
、@Controller
等注解的 Spring 組件。@Configuration
:表明這個類是一個配置類,可以包含@Bean
定義。
2. 自動配置(Auto-Configuration)
@EnableAutoConfiguration
注解觸發(fā)自動配置。
Spring Boot 會根據(jù)類路徑中的依賴、屬性文件中的配置以及其他環(huán)境變量來判斷并自動配置應用所需的 Bean。
自動配置的實現(xiàn)原理
Spring Boot 的自動配置機制依賴于 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 應用上下文初始化時被加載,并根據(jù)條件自動配置相應的 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 應用上下文中。
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
6. 使用 @Autowired 注入依賴
Spring 通過 @Autowired
注解實現(xiàn)依賴注入。
@Autowired
可以應用于構(gòu)造器、方法和字段,Spring 會自動注入相應的 Bean。
@Service public class MyService { private final MyRepository myRepository; @Autowired public MyService(MyRepository myRepository) { this.myRepository = myRepository; } // 或者通過字段注入 @Autowired private MyRepository myRepository; }
總結(jié)
Spring Boot 通過一系列注解和條件配置實現(xiàn)了自動裝配機制,使得開發(fā)者無需手動配置大量的 XML 文件或 Java 配置類。
自動配置機制利用 spring.factories
文件中的自動配置類,并結(jié)合條件注解和組件掃描,實現(xiàn)了靈活且強大的自動裝配功能。
這樣,開發(fā)者可以專注于業(yè)務邏輯的實現(xiàn),而無需處理繁瑣的配置細節(jié)。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot整合Netty實現(xiàn)RPC服務器的示例代碼
這篇文章主要介紹了Springboot整合Netty實現(xiàn)RPC服務器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01解決SpringMVC接收不到ajaxPOST參數(shù)的問題
今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Java switch 語句如何使用 String 參數(shù)
這篇文章主要介紹了Java switch 語句如何使用 String 參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下2019-06-06Java正則表達式實現(xiàn)在文本中匹配查找換行符的方法【經(jīng)典實例】
這篇文章主要介紹了Java正則表達式實現(xiàn)在文本中匹配查找換行符的方法,結(jié)合具體實例分析了java正則匹配查找換行符的實現(xiàn)技巧與匹配模式相關(guān)操作注意事項,需要的朋友可以參考下2017-04-04Java中各類日期和時間轉(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等類,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01微信公眾平臺開發(fā)實戰(zhàn)Java版之微信獲取用戶基本信息
這篇文章主要介紹了微信公眾平臺開發(fā)實戰(zhàn)Java版之微信獲取用戶基本信息 的相關(guān)資料,需要的朋友可以參考下2015-12-12