博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot Annotations 注解
阅读量:6891 次
发布时间:2019-06-27

本文共 2648 字,大约阅读时间需要 8 分钟。

1.概述

Spring Boot通过其自动配置功能使Spring更容易配置。

在本教程中,我们将探讨org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition包中的注释。

2. @SpringBootApplication

我们使用此批注来标记Spring Boot应用程序的主类:

 

@SpringBootApplication封装@Configuration@EnableAutoConfiguration@ComponentScan注解与他们的默认属性。

springboot程序默认会扫描主类所在包及其子包,所以一般主类放在最外层

1 @SpringBootApplication2 class VehicleFactoryApplication {3  4     public static void main(String[] args) {5         SpringApplication.run(VehicleFactoryApplication.class, args);6     }7 }

3. @EnableAutoConfiguration

@EnableAutoConfiguration,正如其名称所示,支持自动配置。这意味着Spring Boot在其类路径中查找自动配置bean并自动应用它们。(如根据配置文件,classpath下jar包动态决定要自动注入哪些bean)

注意,我们必须在@Configuration中使用此注释:

1 @Configuration2 @EnableAutoConfiguration3 class VehicleFactoryConfig {}
 

4.自动配置条件

通常,当我们编写自定义自动配置时,我们希望Spring 有条件地使用它们。我们可以通过本节中的注释来实现这一点。

我们可以在本节中将注释放在@Configuration类或@Bean方法上。

在接下来的部分中,我们将仅介绍每种情况背后的基本概念。

4.1.@ConditionalOnClass@ConditionalOnMissingClass

如果注释参数中的类在classpath中存在/不存在,Spring依据此结果决定是否启动这个configuration(即是否实例化这个bean)

1 @Configuration2 @ConditionalOnClass(DataSource.class)3 class MySQLAutoconfiguration {4     //...5 }

4.2.@ConditionalOnBean@ConditionalOnMissingBean

当我们想要根据特定bean的存在与否来定义条件时,我们可以使用这些注释:(如下例,只有依赖的bean存在时,自身的bean才会被实例化)

1 @Bean2 @ConditionalOnBean(name = "dataSource")3 LocalContainerEntityManagerFactoryBean entityManagerFactory() {4     // ...5 }

4.3.@ConditionalOnProperty

使用此注释,我们可以为属性值创建条件:(判断是否存在一个属性usemysql,且其值为local)

1 @Bean2 @ConditionalOnProperty(3     name = "usemysql", 4     havingValue = "local"5 )6 DataSource dataSource() {7     // ...8 }

4.4.@ConditionalOnResource

我们可以让Spring仅在存在特定资源时使用定义:(只有mysql.properties文件存在时才满足条件)

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

4.5.@ConditionalOnWebApplication@ConditionalOnNotWebApplication

通过这些注释,我们可以根据当前应用程序是否是Web应用程序创建条件:(应用程序是否是web程序有springboot自己判断,其是根据servlet相关类判断的)

1 @ConditionalOnWebApplication2 HealthCheckController healthCheckController() {3     // ...4 }

4.6.@ConditionalExpression

我们可以在更复杂的情况下使用此注释。当SpEL表达式求值为true时,Spring将使用标记的定义:

spel表达式语法 ${} ,  这里的条件就是环境变量(配置信息)中usemysql=true,mysqlserver == local

1 @Bean2 @ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")3 DataSource dataSource() {4     // ...5 }

4.7.@Conditional

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

(HibernateCondition.java类是需要自己创建的,需要实现接口Condition,重写方法matches,返回true or false。 返回true则条件成立)

1 @Conditional(HibernateCondition.class)2 Properties additionalProperties() {3     //...4 }

5.结论

在本文中,我们概述了如何微调自动配置过程并为自定义自动配置bean提供条件。

转载于:https://www.cnblogs.com/gc65/p/10611890.html

你可能感兴趣的文章
IPMI总结
查看>>
UVA 11988 Broken Keyboard (链表)
查看>>
去掉影响美观的横滚动条
查看>>
「2019冬令营提高组」树
查看>>
配置OWASP的ModSecurity规则
查看>>
laravel 5.1 单元测试 Cannot modify header information 错误
查看>>
周四作业
查看>>
iOS - 正则表达式判断邮箱、身份证..是否正确
查看>>
golang 转换markdown文件为html
查看>>
JS的console使用
查看>>
SpringMVC最简单配置应用
查看>>
8.Appium的基本使用-3(安装JDK、android-sdk)
查看>>
区块链开发(1)基本概念
查看>>
java中的深层复制和浅层复制
查看>>
pytest自动化1:兼容unittest代码实例
查看>>
spring集成freemaker 制作短信模板
查看>>
从 Nginx 优秀的核心架构设计,揭秘其为何能支持高并发?
查看>>
Linux第四章 进程
查看>>
[Vue CLI 3] 插件开发中的 genCacheConfig 细节研究
查看>>
windows下使用php重命名目录下的文件
查看>>