h5響應(yīng)式企業(yè)網(wǎng)站源碼百度推廣客戶端下載
自動裝配
spring?boot的自動裝配(auto?configuration)是通過spring?framework的依賴注入(dependency?injection, DI)和配置類的組合來實現(xiàn)的。?spring?boot?的自動裝配機制可以簡化應(yīng)用的配置過程,是開發(fā)者不再需要手動創(chuàng)建配置文件或管理bean.?而是通過注解和配置類自動完成。
- springboot?自動裝配的原理
- 依賴注入的核心注解
- 自動配置類的加載機制
- @SpringBootApplication注解詳解
- 自定義配置和自動配置的關(guān)系
- 常見的自動裝配場景
- 總結(jié)
springboot自動裝配的原理:?
springboot的自動裝配是基于以下幾個核心機制實現(xiàn)的:
@SpringBootApplication:?它是一個組合注解,包含了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan.
- @SpringBootConfiguration:?主要是聲明該類是一個配置類,這是Springboot專用的配置聲明類
- @EnableAutoConfiguration:?啟動springboot?自動配置機制的核心注解,它會根據(jù)類路徑下的依賴來自動裝配Spring應(yīng)用程序。
- @ComponentScan:?掃碼@Component? @Service @Repository? @Controller等標(biāo)注的類,使得這些bean自動注冊到spring容器中。如果沒有配置路徑或者類。直接掃描該類所在包及其子包中的組件。
- spring.factories: SpringBoot?使用spring-boot-autoconfigure中的META-INFO/spring.factories文件來管理自動裝配的的類。spring.factories文件中列出的所有的自動配置類,這些類在啟動時都會被加載并注冊
?依賴注入的核心注解:
SpringBoot?依賴于springFramework?的依賴注入機制,通過注解實現(xiàn)Bean的自動裝配。主要注解有:
- @Autowired:?可以注入構(gòu)造方法、字段、Setter方法。 Spring會根據(jù)類型在容器中查找匹配的Bean并注入
- @Component、@Service、@Repository、@Controller標(biāo)識類為spring管理的Bean.?其中@Component是通用的注解,?而@Service、@Repository、@Controller是它的變種,分別用于業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層、控制層
- @Configuration:?表示一個配置類,可以定義@Bean方法,將返回的bean注冊到Spring容器中。
@Configuration public class MyConfiguration{@Beanpublic MyService myService(){return new MyService();} }
自動配置類的加載機制
-
Spring Boot通過@EnableAutoConfiguration啟動自動配置機制,他會掃描spring.factories文件中配置的自動配置類,并通過條件注解(如@ConditionalOnClass @ConditionalOnMissingBean)決定是否加載這些配置類。
-
條件注解:?自動配置類中使用條件注解來控制配置的生效,常見的條件注解有:
-
@ConditionalOnClass:?當(dāng)類路徑下存在指定的類時,配置才會生效。
-
@ConditionalOnMissingClass:?當(dāng)Spring容器中沒有指定類型的bean時,才會創(chuàng)建Bean.
-
@ConditionalOnProperty:?當(dāng)配置文件中存在特定的屬性時,配置才會生效。
?例如,Spring Boot 提供的 DataSource
自動配置類 DataSourceAutoConfiguration
:
@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic DataSource dataSource(DataSourceProperties properties) {// 創(chuàng)建 DataSource Bean}
}
當(dāng)項目中引入了數(shù)據(jù)庫依賴(如 HikariCP
),DataSourceAutoConfiguration
會自動配置一個 DataSource
對象。
@SpringBootApplication
注解詳解
?@SpringBootApplication
是一個組合注解,通常放在主啟動類上:
@SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
其中包含了:
@SpringBootConfiguration
:等價于@Configuration
,標(biāo)識該類為配置類。@EnableAutoConfiguration
:啟用 Spring Boot 的自動配置機制。@ComponentScan
:掃描該類所在包及其子包中的@Component
、@Service
、@Repository
等注解。
?自定義配置和自動配置的關(guān)系
在使用自動裝配時,可以通過手動定義的 @Bean
、@Configuration
優(yōu)先覆蓋自動配置類中的默認(rèn)配置。例如,自定義一個 DataSource
:
@Configuration
public class CustomDataSourceConfig {@Beanpublic DataSource customDataSource() {return new HikariDataSource();}
}
這樣,即使自動配置類中也定義了 DataSource
,但由于 @ConditionalOnMissingBean
的存在,自定義的 DataSource
會優(yōu)先被加載。
定制自動配置:可以通過以下幾種方式定制 Spring Boot 的自動配置:
@ConditionalOnProperty
:通過屬性控制自動配置的啟用或禁用。例如,通過設(shè)置spring.datasource.enabled=false
可以禁用數(shù)據(jù)源的自動配置。- 自定義
@Configuration
類:可以通過編寫自定義的@Configuration
類來覆蓋默認(rèn)的自動配置。 @Import
:可以手動導(dǎo)入一些自動配置類來精確控制自動配置的內(nèi)容。
常見的自動裝配場景
- 數(shù)據(jù)庫配置:通過引入
spring-boot-starter-data-jpa
或spring-boot-starter-jdbc
,Spring Boot 自動配置數(shù)據(jù)源、JPA 實體管理等。 - Web 框架配置:引入
spring-boot-starter-web
,Spring Boot 會自動配置DispatcherServlet
、Jackson
JSON 解析器等。 - 消息隊列配置:引入
spring-boot-starter-amqp
,自動配置 RabbitMQ 連接工廠、模板和監(jiān)聽器容器。
?總結(jié)
Spring Boot 的自動裝配極大地簡化了 Spring 應(yīng)用的開發(fā):
- 減少配置文件:開發(fā)者不需要在
XML
或 Java 配置類中顯式配置每個組件,Spring Boot 會根據(jù)類路徑中的依賴自動加載相應(yīng)的配置。 - 減少樣板代碼:在傳統(tǒng)的 Spring 應(yīng)用中,我們可能需要編寫很多
@Configuration
類來設(shè)置數(shù)據(jù)源、事務(wù)管理器、視圖解析器、消息轉(zhuǎn)換器等。但在 Spring Boot 中,大部分常見的配置都是自動配置好的,開發(fā)者只需要關(guān)注業(yè)務(wù)邏輯。例如,若要使用 Spring MVC,傳統(tǒng) Spring 需要配置 DispatcherServlet 和 ViewResolver 等,但在 Spring Boot 中,只需要在類路徑中添加spring-boot-starter-web
依賴即可,Spring Boot 會自動配置這些組件。 - 按需加載:通過條件注解和
spring.factories
文件,Spring Boot 只加載需要的配置。 - 可擴展性強:可以通過自定義配置或修改
application.properties
文件中的屬性,靈活調(diào)整自動配置的行為。