文章目录

  • 简介
  • @SpringBootApplication
  • @EnableAutoConfiguration
  • 条件自动配置
  • @ConditionalOnClass 和 @ConditionalOnMissingClass
  • @ConditionalOnProperty
  • @ConditionalOnResource
  • @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
  • @ConditionalExpression
  • @Conditional

Spring Boot注解

简介

Spring Boot通过自动配置让我们更加简单的使用Spring。在本文中我们将会介绍org.springframework.boot.autoconfigure 和org.springframework.boot.autoconfigure.condition 里面经常会用到的一些注解。

@SpringBootApplication

首先我们看一下@SpringBootApplication:

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

@SpringBootApplication被用在Spring Boot应用程序的Main class中,表示整个应用程序是Spring Boot。

@SpringBootApplication实际上是@Configuration, @EnableAutoConfiguration 和 @ComponentScan 的集合。

@EnableAutoConfiguration

@EnableAutoConfiguration 意味着开启了自动配置。这意味着Spring Boot会去在classpath中查找自动配置的beans,并且自动应用他们。

注意, @EnableAutoConfiguration需要和@Configuration配合使用。

 @Configuration
@EnableAutoConfiguration
public class VehicleFactoryConfig {}

条件自动配置

有时候,我们在自定义自动配置的时候,希望根据某些条件来开启自动配置,Spring Boot 提供了一些有用的注解。

这些注解可以和@Configuration 类 或者 @Bean 方法一起使用。

@ConditionalOnClass 和 @ConditionalOnMissingClass

这两个注解的意思是,如果注解参数中的类存在或者不存在则Spring会去实例化自动配置的bean。

 @Configuration
@ConditionalOnClass(DataSource.class)
public class MySQLAutoconfiguration {}

@ConditionalOnBean 和 @ConditionalOnMissingBean

这两个和上面的区别在于,这两个是判断是否有实例化的bean存在。

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

@ConditionalOnProperty

使用这个注解我们可以判断Property的某些属性是不是需要的值:

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

@ConditionalOnResource

只有当某些resource存在的时候,才会起作用。

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

@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

这两个注解通过判断是否web应用程序。

    @Bean@ConditionalOnWebApplicationHealthCheckController healthCheckController() {// ...return null;}

@ConditionalExpression

这个注解可以使用SpEL构造更加复杂的表达式:

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

@Conditional

还有一种更加复杂的应用叫@Conditional,它的参数是一个自定义的condition类。

    @Bean@Conditional(HibernateCondition.class)Properties newAdditionalProperties() {//...return null;}
public class HibernateCondition implements Condition {@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {return false;}
}

这个类需要实现matches方法。

本文的例子可以参考:https://github.com/ddean2009/learn-springboot2/tree/master/spring-boot-annotations

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考 flydean的博客

Spring Boot注解相关推荐

  1. 超级详细的Spring Boot 注解总结

    日常编程中我相信大家肯定都用过spring,也用过spring的注解,哪怕面试的时候也经常会被问到一些spring和spring boot注解的作用和含义等,那么这篇就带大家来看看超级详细的Sprin ...

  2. Spring Boot 注解原理

    Spring Boot 注解原理 首先,先看SpringBoot的主配置类: @SpringBootApplication public class StartEurekaApplication {p ...

  3. Spring Boot注解的运行原理

    Spring Boot 是一个基于 Spring Framework 的开源框架,通过简化配置和开发过程,使 Spring 应用程序的开发变得更加快速和便捷.在 Spring Boot 中,注解是非常 ...

  4. Spring Boot注解大全,一键收藏了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:www.cnblogs.com/tanwei81/p/681 ...

  5. 一次性搞懂Spring Boot 注解原理与自动装配原理,图文并茂,万字长文!

    原文:cnblogs.com/jing99/p/11504113.html 首先,先看SpringBoot的主配置类: @SpringBootApplication public class Star ...

  6. 【建议收藏】Spring Boot注解全梳理!

    一.注解(annotations)列表 @SpringBootApplication:包含了**@ComponentScan**.「@Configuration」 和 「@EnableAutoConf ...

  7. Spring boot 注解 ConfigurationProperties 的使用

    原创自 第一勺金 00 最近在学习使用 spring boot.发现其中 @ConfigurationProperties这个注解使用的比较多.搜了比较多的文档都是英文,避免以后忘记,这里我也总结下它 ...

  8. Spring Boot 注解大全,一键收藏!回城路上复习!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | www.cnblogs.com/tanwei8 ...

  9. 10000 字讲清楚 Spring Boot 注解原理

    今日推荐 借助Redis锁,完美解决高并发秒杀问题还在直接用JWT做鉴权?JJWT真香Spring Boot 操作 Redis 的各种实现Fluent Mybatis 牛逼!Nginx 常用配置清单这 ...

最新文章

  1. 【Android】自定义listview快速滚动条
  2. [计算机]“华为的冬天”——任正非(华为总裁)
  3. 全国计算机等级考试题库二级C操作题100套(第19套)
  4. Linux多线程详解
  5. 在ASP.NET Core 2.0中创建Web API
  6. Java IO3:字符流
  7. 层次分析法在高校教学评价体系中的应用(原理+实例+工具)
  8. 安装英伟达驱动,提示驱动和windows版本不兼容或是硬件不兼容的问题
  9. 计算机声卡的步骤,声卡调试教程
  10. 几何基础 笛沙格定理
  11. 2021全国省市区街道社区五级SQL文件以及JAVA爬取代码
  12. java thread 简单写法_Java线程池写法改写为C#线程池写法
  13. CF Stressful training优先队列加二分搜答案
  14. 小波变换第2讲:尺度函数与小波函数
  15. 一个比较稳定的PLC通讯模块设计
  16. An End-to-End Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features
  17. 代表着团结幸福平安的中国结绳
  18. ffmpeg实例,colorkey,chromakey抠图的使用
  19. 解决找不到roslyn\csc.exe文件问题
  20. 自信心、自制力。Java

热门文章

  1. 深度优先遍历算法-01小偷偷东西问题
  2. [计算机网络]探索ICMP协议
  3. STL中的find_if函数
  4. 【Boost】boost库中智能指针——shared_ptr
  5. SQLServer权限
  6. HTTP/2 流量调试
  7. 记一次kubect init初始化端口占用问题
  8. 用 Go 操作 MySQL 的 200 万数据时应该怎么搞?
  9. Mozilla裁员波及Daala Codec团队
  10. 编码服务正在步入云端