在这篇快速文章中,我们将探讨org.springframework.boot.autoconfigure
和org.springframework.boot.autoconfigure.condition
包的注解。
我们知道,Spring Boot是来自Pivotal团队的一个全新框架,旨在简化新Spring应用的启动和开发。该框架对配置采取了一种有主见的方法,使开发人员无需定义模板配置。它提供了代码和注解配置的默认值,可以在短时间内快速启动新的Spring项目。
Spring boot从org.springframework.boot.autoconfigure
和org.springframework.boot.autoconfigure.condition
包中为自动配置提供了许多注解。让我们列出这些包中的所有注解。
@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注解与实例。
@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注解与实例
这些注解属于Class条件。@ConditionalOnClass
和@ConditionalOnMissingClass
注解让配置基于特定类的存在或不存在而被包含。
**例子:**在下面的例子中,使用这些条件,Spring将只在注解参数中的类存在/不存在的情况下使用标记的自动配置Bean。
@Configuration
@ConditionalOnClass(DataSource.class)
class OracleAutoconfiguration {
//...
}
@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,那么myService
bean就要被创建。
@ConditionalOnProperty
注解让配置基于Spring Environment
属性而被包含。
**@ConditionalOnProperty
注解的例子:**通过这个注解,我们可以对属性的值提出条件。
@Bean
@ConditionalOnProperty(
name = "usemysql",
havingValue = "local"
)
DataSource dataSource() {
// ...
}
@ConditionalOnResource
注解让配置仅在特定资源存在时被包含。
@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
// ...
}
@ConditionalOnWebApplication
和@ConditionalOnNotWebApplication
注解让配置根据应用程序是否为 "网络应用 "而被包含。网络应用是指使用Spring WebApplicationContext
、定义会话范围或有StandardServletEnvironment
的应用。
**@ConditionalOnWebApplication
注解示例代码:**通过这些注解,我们可以根据当前应用程序是否是Web应用程序来创建条件。
@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
// ...
}
我们可以在更复杂的情况下使用这个注解。当SpEL expression
被评估为真时,Spring将使用标记的定义。
@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
// ...
}
对于更复杂的条件,我们可以创建一个评估自定义条件的类。我们告诉Spring使用这个自定义条件与@Conditional
。
@Conditional(HibernateCondition.class)
Properties additionalProperties() {
//...
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/10/spring-boot-annotations.html
内容来源于网络,如有侵权,请联系作者删除!