@Configuration,@Value,@ConfigurationProperties注解如何使用

开发 前端
主要是讲解属性注入的使用,我们可以根据不同的场景使用不同的配置进行合理的使用注解,没有最好的,只有合适才是最好的。

一,@Configuration

概述

是spring里面的类,其实就是取代xml配置实例化bean的,是一个配置类,声明这个类是一个作为配置类,取代xml中的bean注册对象的,一般和@Bean以及@Scope注解配合使用,将bean对象注入并交给Spring来进行管理,当然他本身也是一个类,由@component修饰,也是一个交给Spring管理的bean,所以也拥有@component功能,可以getBean获取此对象,有一个属性proxyBeanMethods,为true的时候,是保持单例对象,为false的时候,是不进行ioc容器的检查,而是简单的调用方法创建对象,可能会有多个实例对象存在。

注解图

使用过程

作用

主要是用于注入一些Bean对象到IOC容器,比如注入dateSource,注入一些自己需要配置的类交给Spring来管理,就是bean注册以及实例化的。

二,@Value

概述

此注解也是Spring 中的,可以从配置文件中注入一些属性到业务层代码中去,一般是有两种格式,是${}和#{},一般我们使用的都是${},使用这个变量,可以注入字符串,可以注入list等,都是可以的,类型按照规则匹配即可,这也是我们经常需要使用的,是读取配置文件中的属性;#{}使用的就是直接注入当前配置的属性,或者注入其他bean的属性,这种用法和情景在平时很少使用。

注解图

使用过程

${}

#{}

作用

${}主要是使用这个,注入配置文件中的属性值,可以支持一些复杂的数据类型,方便注入配置可变的属性,注意当配置文件中的属性不存在的时候,会报错,我们可以使用给一个默认值,也可以使用下面的@ConfigurationProperties注解进行属性的注入。

三,@ConfigurationProperties

概述

此注解是SpringBoot中的注解,主要是三种使用场景,主要就是也是读取配置文件的属性,这个读取属性,可以将属性统一配置到一个实体类中去,这样使用的时候,就可以从全局中获取,不需要我们在各个地方注入,可以统一来进行管理,主要是用于配置文件中的属性注入。

注解图

使用过程

属性注入

注:注入属性,统一管理,不会报错,建议和@RefreshScop(是springCloud的注解)注解配置使用,用于可以刷新配置,当Bean被实例化时,@ConfigurationProperties会将对应前缀的后面的属性与Bean对象的属性匹配。符合条件则进行赋值。

在配置类的Bean定义

注:这里便是将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。

通过@EnableConfigurationProperties定义为Bean

注:通过@EnableConfigurationProperties对KafkaProperties进行实例化时,便会使用到@ConfigurationProperties的功能,对属性进行匹配赋值。就可以使用bean注册,使用bean。

作用

主要就是配置问价中的属性和java类定义的属性进行绑定在注入,对属性赋值,一般我们建议使用此注解进行注入属性,而且再Springcloud中可以配合使用,刷新配置文件中的值,@value也可以使用,如果只是一个属性的话,可以建议使用。

@EnableConfigurationProperties

其实这个注解就是和@ConfigurationProperties注解配合使用,进行属性注入的绑定,就是将配置文件中的属性和@ConfigurationProperties修饰的类进行属性绑定,并交给到Spring来进行管理,当然 也可以只使用@ConfigurationProperties并使用@Component修饰,交给spring来进行管理,也可以的。一般我们是这样使用的,不过可以看下KafkaProperties的使用,就可以发现是使用了这种配合的注解。

四,总结

主要是讲解属性注入的使用,我们可以根据不同的场景使用不同的配置进行合理的使用注解,没有最好的,只有合适才是最好的。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-12-08 17:12:34

注解源码场景

2023-08-28 10:52:52

Full模式Lite

2021-03-24 08:25:08

@SentinelReSentinelSpring

2024-01-08 08:27:11

注解Bean代理

2022-01-19 13:57:22

ymlSpringSnakeYml

2024-03-07 08:32:35

注解InitBinderHTML

2023-07-29 22:11:58

Spring容器Component

2021-07-19 09:42:45

Spring Boot@ValueJava

2023-05-29 08:11:42

@Value注解Bean

2010-12-16 11:01:55

Windows Ser

2009-06-15 17:48:32

Spring注解注入属性

2021-09-02 22:52:16

ValueDictionary排序

2009-06-24 08:05:56

Hibernate基础Configurati

2009-09-23 17:07:31

Hibernate C

2012-02-09 10:42:24

Java

2023-08-31 08:12:23

应用场景业务异常HTTP

2022-08-17 07:06:14

SpringBoot配置@Value

2023-08-04 07:22:32

SpringBoot项目

2023-06-30 08:26:24

Java注解Java程序元素

2023-10-25 08:17:06

Lite模式代理类
点赞
收藏

51CTO技术栈公众号