Spring Boot注解

文章目录

Spring Boot注解

简介

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

@SpringBootApplication

首先我们看一下@SpringBootApplication:

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

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

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

@EnableAutoConfiguration

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

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

1@Configuration 2@EnableAutoConfiguration 3public class VehicleFactoryConfig { 4}

条件自动配置

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

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

@ConditionalOnClass 和 @ConditionalOnMissingClass

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

1@Configuration 2@ConditionalOnClass(DataSource.class) 3public class MySQLAutoconfiguration { 4}

@ConditionalOnBean 和 @ConditionalOnMissingBean

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

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

@ConditionalOnProperty

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

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

@ConditionalOnResource

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

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

@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

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

1@Bean 2 @ConditionalOnWebApplication 3 HealthCheckController healthCheckController() { 4 // ... 5 return null; 6 }

@ConditionalExpression

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

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

@Conditional

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

1@Bean 2 @Conditional(HibernateCondition.class) 3 Properties newAdditionalProperties() { 4 //... 5 return null; 6 } 7 8public class HibernateCondition implements Condition { 9 @Override 10 public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { 11 return false; 12 } 13}

这个类需要实现matches方法。

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

更多教程请参考 flydean的博客

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Spring Boot注解 - HelloWorld