Spring Boot Annotations 注解

1.概述

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

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

2. @SpringBootApplication

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

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

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

1 @SpringBootApplication
2 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 @Configuration
2 @EnableAutoConfiguration
3 class VehicleFactoryConfig {}

4.自动配置条件

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

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

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

4.1.@ConditionalOnClass@ConditionalOnMissingClass

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

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

4.2.@ConditionalOnBean@ConditionalOnMissingBean

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

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

4.3.@ConditionalOnProperty

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

1 @Bean
2 @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 @ConditionalOnWebApplication
2 HealthCheckController healthCheckController() {
3     // ...
4 }

4.6.@ConditionalExpression

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

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

1 @Bean
2 @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

时间: 2024-10-08 06:24:07

Spring Boot Annotations 注解的相关文章

spring boot 之注解

@EnableAutoConfiguration有这个注解,spring boot 就会根据classpat中的jar依赖,来猜测你将要开发一个什么样的spring应用.比如:spring-boot-starter-web这个依赖,则springboot就会自动嵌入tomcat和springMVC的相关依赖,并在启动的时候,启动为一个web应用.并会查找相应的配置参数,如果没有,则使用默认值.如:server.port=8080: @Component它是一个类级注解.当应用是通过注解来配置或x

spring boot 的注解

(1)@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置. 示例代码: package com.kfit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.Spr

spring boot常用注解使用小结

1.@RestController和@RequestMapping注解 4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解. 4.0之前的版本,Spring MVC的组件都使用@Controller来标识当前类是一个控制器servlet.使用这个特性,我们可以开发REST服务的时候不需要使用@Controller,而专门的@RestController. 当你实现一个RESTful web services的时候,response将一直通过respo

Spring Boot MyBatis注解:@MapperScan和@Mapper

最近参与公司的新项目架构搭建,在使用mybatis的注解时,和同时有了不同意见,同事认为使用@Mapper注解简单明了,而我建议使用@MapperScan,直接将mapper所在的目录扫描进去就行,而且@Mapper需要在每一个mapper上都添加,繁琐.同事又说--我们可以用逆向工程自动生产entity,mapper,service时,将注解加上,很方便的,于是各执一词. 下面是我整理的这两种方法的比较: 使用@Mapper注解 为了让DemoMapper能够让别的类进行引用,我们可以在Dem

Spring Boot @Condition 注解,组合条件你知道吗

上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties 注解灵活读取配置属性,这篇文章将介绍如何灵活配置 Spring Bean 写在前面 当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, 在Spring 4.0 时代,我们可以通过 @Conditional 注解来实现这类操作 我们看到 @Conditional 注解

【转】Spring Boot @Condition 注解,组合条件你知道吗

原文:https://www.cnblogs.com/FraserYu/p/11280420.html 上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties 注解灵活读取配置属性,这篇文章将介绍如何灵活配置 Spring Bean 写在前面 当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, 在Spring 4.0 时

Spring Boot 之注解@Component @ConfigurationProperties(prefix = "sms")

从spring-boot开始,已经支持yml文件形式的配置,@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 例如: 配置文件: sms.url=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sms.appkey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX sms.secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX sms.signName=XXXXXXXXXXXXX

spring boot 条件注解表达式

@Configuration @ConditionalOnClass(JAXRSServerFactoryBean.class) @ConditionalOnExpression("'${cxf.jaxrs.component-scan}'=='true' && '${cxf.jaxrs.classes-scan}'!='true'") @Import(SpringComponentScanServer.class) protected static class Jax

Spring Boot AutoConfiguration注解@ConditionalXXXX之前生今世

1.注解@Conditional的定义 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Conditional { /** * All {@link Condition}s that must {@linkplain Condition#matches match} * in order for the component to be reg