Spring Boot注解介绍@SpringBootApplication @EnableAutoConfiguration @ConditionalOnClass @ConditionalOnBean @ConditionalOnProperty @ConditionalOnResource

x33g5p2x  于2021-08-25 转载在 Spring  
字(3.6k)|赞(0)|评价(0)|浏览(363)

在这篇快速文章中,我们将探讨org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition包的注解。

我们知道,Spring Boot是来自Pivotal团队的一个全新框架,旨在简化新Spring应用的启动和开发。该框架对配置采取了一种有主见的方法,使开发人员无需定义模板配置。它提供了代码和注解配置的默认值,可以在短时间内快速启动新的Spring项目。

Spring boot从org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition包中为自动配置提供了许多注解。让我们列出这些包中的所有注解。

1. @SpringBootApplication

@SpringBootApplication注解表示一个配置类,它声明了一个或多个@Bean方法,也触发了自动配置和组件扫描。

@SpringBootApplication注解等同于使用@Configuration、@EnableAutoConfiguration和@ComponentScan的默认属性。((1$))。
**@SpringBootApplication注解示例:**我们使用该注解来标记Spring Boot应用程序的主类。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

阅读更多关于Spring Boot上的@SpringBootApplication注解 @SpringBootApplication注解与实例。

2.@EnableAutoConfiguration

@EnableAutoConfiguration注解告诉Spring Boot根据你添加的jar依赖项 "猜测 "你想如何配置Spring。由于spring-boot-starter-web依赖项被添加到classpath中,导致配置Tomcat和Spring MVC,自动配置假定你正在开发一个Web应用,并相应地设置Spring。

**@EnableAutoConfiguration注解示例:**让我们在Application类或Main类中添加@EnableAutoConfiguration注解来启用自动配置功能。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

阅读更多关于Spring Boot上的@SpringBootApplication注解 @EnableAutoConfiguration注解与实例

3. @ConditionalOnClass 和 @ConditionalOnMissingClass

这些注解属于Class条件。@ConditionalOnClass@ConditionalOnMissingClass注解让配置基于特定类的存在或不存在而被包含。

**例子:**在下面的例子中,使用这些条件,Spring将只在注解参数中的类存在/不存在的情况下使用标记的自动配置Bean。

@Configuration
@ConditionalOnClass(DataSource.class)
class OracleAutoconfiguration {
    //...
}

4. @ConditionalOnBean和@ConditionalOnMissingBean

@ConditionalOnBean@ConditionalOnMissingBean 注解让一个bean根据特定bean的存在或不存在而被包含。

**@ConditionalOnBean注解示例:**当我们想根据特定Bean的存在或不存在来定义条件时使用。

@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    // ...
}

**@ConditionalOnMissingBean注解示例:**当放在一个@Bean方法上时,目标类型默认为该方法的返回类型,如下例所示。

@Configuration
public class MyAutoConfiguration {

 @Bean
 @ConditionalOnMissingBean
 public MyService myService() { ... }
}

在前面的例子中,如果ApplicationContext中已经不包含MyService类型的bean,那么myServicebean就要被创建。

5. @ConditionalOnProperty

@ConditionalOnProperty注解让配置基于Spring Environment属性而被包含。

**@ConditionalOnProperty注解的例子:**通过这个注解,我们可以对属性的值提出条件。

@Bean
@ConditionalOnProperty(
    name = "usemysql", 
    havingValue = "local"
)
DataSource dataSource() {
    // ...
}

6. @ConditionalOnResource

@ConditionalOnResource 注解让配置仅在特定资源存在时被包含。

@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
    // ...
}

7. @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

@ConditionalOnWebApplication@ConditionalOnNotWebApplication注解让配置根据应用程序是否为 "网络应用 "而被包含。网络应用是指使用Spring WebApplicationContext、定义会话范围或有StandardServletEnvironment的应用。

**@ConditionalOnWebApplication注解示例代码:**通过这些注解,我们可以根据当前应用程序是否是Web应用程序来创建条件。

@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
    // ...
}

8. @ConditionalExpression

我们可以在更复杂的情况下使用这个注解。当SpEL expression被评估为真时,Spring将使用标记的定义。

@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
    // ...
}

9. @Conditional

对于更复杂的条件,我们可以创建一个评估自定义条件的类。我们告诉Spring使用这个自定义条件与@Conditional

@Conditional(HibernateCondition.class)
Properties additionalProperties() {
    //...
}

相关文章