<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring Boot 注解 > 原文: [https://howtodoinjava.com/spring-boot2/spring-boot-annotations/](https://howtodoinjava.com/spring-boot2/spring-boot-annotations/) [SpringBoot](https://howtodoinjava.com/spring-boot-tutorials/)注解大部分放在`org.springframework.boot.autoconfigure`和`org.springframework.boot.autoconfigure.condition`封裝中。 讓我們了解一些常用的**SpringBoot 注解**以及在幕后工作的注解。 ## 1\. `@SpringBootApplication` SpringBoot 主要是關于自動配置。 這種自動配置是通過**組件掃描**來完成的,即在`classspath`中找到[`@Component`](https://howtodoinjava.com/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/)注解的所有類。 它還涉及掃描`@Configuration`注解并初始化一些額外的 bean。 [`@SpringBootApplication`](https://howtodoinjava.com/spring-boot/springbootapplication-auto-configuration/)注解可一步實現所有功能。 它啟用了三個功能: 1. `@EnableAutoConfiguration`:啟用自動配置機制 2. [`@ComponentScan`](https://howtodoinjava.com/spring-mvc/spring-mvc-difference-between-contextannotation-config-vs-contextcomponent-scan/):啟用`@Component`掃描 3. `@SpringBootConfiguration`:在上下文中注冊額外的 bean > 帶有`@SpringBootApplication`注解的 Java 類是 Spring Boot 應用程序的主要類,應用程序從此處開始。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ## 2\. `@EnableAutoConfiguration` 該注解啟用 Spring 應用上下文的自動配置,并根據類路徑中預定義類的存在來嘗試猜測和配置我們可能需要的 bean。 例如,如果我們在類路徑上具有`tomcat-embedded.jar`,則可能需要`TomcatServletWebServerFactory`。 由于此注解已經通過`@SpringBootApplication`包含在內,因此在主類上再次添加它不會產生影響。 還建議僅通過`@SpringBootApplication`將此注解包含一次。 自動配置類是常規的 Spring 配置 bean。 它們使用`SpringFactoriesLoader`機制定位(針對此類)。 通常,自動配置 bean 是`@Conditional` bean(最常使用`@ConditionalOnClass`和`@ConditionalOnMissingBean`注解)。 ## 3\. `@SpringBootConfiguration` 它指示一個類提供 Spring Boot 應用程序配置。 可以用作 Spring 標準`@Configuration`注解的替代方法,以便可以自動找到配置。 應用程序只能包含一個`@SpringBootConfiguration`,并且大多數慣用的 Spring Boot 應用程序都將從`@SpringBootApplication`繼承它。 兩個注解的主要區別在于`@SpringBootConfiguration`允許自動定位配置。 這對于單元測試或集成測試特別有用。 ## 4\. `@ImportAutoConfiguration` 它僅導入和應用指定的自動配置類。 `@ImportAutoConfiguration`和`@EnableAutoConfiguration`之間的區別在于,稍后嘗試配置在掃描過程中在類路徑中找到的 bean,而`@ImportAutoConfiguration`僅運行我們在注解中提供的配置類。 當我們不想啟用默認自動配置時,應使用`@ImportAutoConfiguration`。 `@ImportAutoConfiguration example` ```java @ComponentScan("path.to.your.controllers") @ImportAutoConfiguration({WebMvcAutoConfiguration.class ,DispatcherServletAutoConfiguration.class ,EmbeddedServletContainerAutoConfiguration.class ,ServerPropertiesAutoConfiguration.class ,HttpMessageConvertersAutoConfiguration.class}) public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } ``` ## 5\. `@AutoConfigureBefore`,`@AutoConfigureAfter`,`@AutoConfigureOrder` 如果我們的配置需要以特定順序(在之前之前)應用,則可以使用`@AutoConfigureAfter`或`@AutoConfigureBefore`注解。 如果我們要訂購某些彼此之間不具有直接知識的自動配置,則也可以使用`@AutoConfigureOrder`。 該注解與常規`@Order`注解具有相同的語義,但為自動配置類提供了專用順序。 `@AutoConfigureAfter Example` ```java @Configuration @AutoConfigureAfter(CacheAutoConfiguration.class) @ConditionalOnBean(CacheManager.class) @ConditionalOnClass(CacheStatisticsProvider.class) public class RedissonCacheStatisticsAutoConfiguration { @Bean public RedissonCacheStatisticsProvider redissonCacheStatisticsProvider(){ return new RedissonCacheStatisticsProvider(); } } ``` ## 5\. 條件注解 所有自動配置類通常都具有一個或多個`@Conditional`注解。 它僅在條件滿足時才允許注冊 bean。 以下是一些有用的條件注解。 #### 5.1. `@ConditionalOnBean`和`@ConditionalOnMissingBean` 這些注解可根據是否存在特定 bean 來包含 bean。 `value`屬性用于通過或`by name`類型指定 bean。`search`屬性還允許我們限制在搜索 bean 時應考慮的`ApplicationContext`層次結構。 如果條件不匹配,則在類級別使用這些注解可防止將`@Configuration`類注冊為 Bean。 在下面的示例中,只有在應用程序上下文中尚未定義類型`JpaTransactionManager`的 bean 時,才會加載 bean `JpaTransactionManager`。 ```java @Bean @ConditionalOnMissingBean(type = "JpaTransactionManager") JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory); return transactionManager; } ``` #### 5.2. `@ConditionalOnClass`和`@ConditionalOnMissingClass` 這些注解可根據是否存在特定類來包含配置類。 請注意,注解元數據是通過使用 spring ASM 模塊進行解析的,即使在運行時中可能不存在類,您仍然可以在注解中引用該類。 我們還可以使用`value`屬性引用真實的類,或使用`name`屬性通過使用字符串值來指定類名稱。 僅當此類在運行時可用并且應用程序上下文中不存在其他具有相同名稱的 bean 時,以下配置才會創建`EmbeddedAcmeService`。 ```java @Configuration @ConditionalOnClass(EmbeddedAcmeService.class) static class EmbeddedConfiguration { @Bean @ConditionalOnMissingBean public EmbeddedAcmeService embeddedAcmeService() { ... } } ``` #### 5.3. `@ConditionalOnNotWebApplication`和`@ConditionalOnWebApplication` 這些注解根據應用程序是否為“Web 應用程序”而包含配置。 在 Spring,Web 應用程序是至少滿足以下三個要求之一的應用程序: 1. 使用 Spring`WebApplicationContext` 2. 定義`session`范圍 3. 有一個`StandardServletEnvironment` #### 5.4. `@ConditionalOnProperty` 這個注解允許基于 Spring `Environment`屬性的存在和值包括配置。 例如,如果我們針對不同的環境具有不同的數據源定義,則可以使用此注解。 ```java @Bean @ConditionalOnProperty(name = "env", havingValue = "local") DataSource dataSource() { // ... } @Bean @ConditionalOnProperty(name = "env", havingValue = "prod") DataSource dataSource() { // ... } ``` #### 5.5. `@ConditionalOnResource` 該注解使配置僅在類路徑中存在特定資源時才包括在內。 可以使用常規的 Spring 約定來指定資源。 ```java @ConditionalOnResource(resources = "classpath:vendor.properties") Properties additionalProperties() { // ... } ``` #### 5.6. `@ConditionalOnExpression` 該注解允許基于[ SpEL 表達式](https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/core.html#expressions)的結果包括配置。 當要評估的條件很復雜且應作為一個條件評估時,請使用此注解。 ```java @Bean @ConditionalOnExpression("${env} && ${havingValue == 'local'}") DataSource dataSource() { // ... } ``` #### 5.7. `@ConditionalOnCloudPlatform` 當指定的云平臺處于活動狀態時,此注解可包括配置。 ```java @Configuration @ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY) public class CloudConfigurationExample { @Bean public MyBean myBean(MyProperties properties) { return new MyBean(properties.getParam); } } ``` 在評論中向我發送有關**SpringBoot 注解**的問題。 學習愉快! 參考: [Spring Boot Docs](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看