写点什么

Spring Boot「04」Annotations 01

作者:Samson
  • 2022-10-12
    上海
  • 本文字数:1215 字

    阅读完需:约 4 分钟

Spring Boot「04」Annotations 01

简单地讲,Spring Boot 是 Spring 框架的扩展,它消除了使用 Spring 框架开发应用所需要的、大量的样板配置代码。Spring Boot 中最显著的就是其所谓的“自动化配置”功能。Spring Boot 项目追求的是快速、高效地开发,及完备的生态链。Spring Boot 的特性有:


  • 通过各种 starter 依赖,简化构建过程和应用配置;

  • 通过内置 Server(tomcat/jetty)来避免部署时的复杂性;

  • 通过 auto configure 尽可能地自动配置 Spring 框架

Spring Boot 中的常用注解之一:@SpringBootApplication

@SpringBootApplicationpublic class SpringBootAnnotations {    public static void main(String[] args) {        SpringApplication.run(SpringBootAnnotations.class, args);    }}
复制代码


注解@SpringBootApplication等价于:@Configuration + @EnableAutoConfiguration + @ComponentScan

@EnableAutoConfiguration

注解的主要作用是开启自动化配置。开启以后,Spring Boot 会在 classpath 中查找所有所有的 auto-configuration beans,并应用它们。该标签必须与@Configuration搭配使用。

条件化自动配置

本节涉及的注解,可以与@Configuration@Bean一起使用。


  1. @ConditionalOnClass@ConditionalOnMissingClass,仅当传入注解中的参数在 classpath 中存在(或不存在)时,@Configuration@Bean才生效。

  2. @ConditionalOnBean@ConditionalOnMissingBean,仅当传入注解中的 bean 存在(或不存在)时,@Configuration@Bean才生效

  3. @ConditionalOnProperty,仅当某个 property 的值为特定值时,@Configuration@Bean才生效


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


  1. @ConditionalOnResource,仅当某个资源(例如 classpath:application.properties)存在时,@Configuration@Bean才生效


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


  1. @ConditionalOnWebApplication@ConditionalOnNotWebApplication,仅当应用是(或者不是)web 应用时,@Configuration@Bean才生效


@ConditionalOnWebApplicationHealthCheckController healthCheckController() {    // ...}
复制代码


  1. @ConditionalExpression,仅当作为注解参数的 SpEL 表达式值为 true 时,@Configuration@Bean才生效


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


  1. @Conditional,仅当作为参数指定的类(实现了Condition接口)返回值为 true 时,@Configuration@Bean才生效


@Conditional(HibernateCondition.class)Properties additionalProperties() {    //...}public class HibernateCondition implements Condition {    @Override    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return true; }}
复制代码


发布于: 刚刚阅读数: 4
用户头像

Samson

关注

还未添加个人签名 2019-07-22 加入

InfoQ签约作者 | 阿里云社区签约作者

评论

发布
暂无评论
Spring Boot「04」Annotations 01_Java_Samson_InfoQ写作社区