大家好,这篇文章主要记录一下SpringBoot中通过使用自定义注解实现配置类对象自动注入的方式。能力尚微,如有问题请大家多批评指正。
前言
SpringBoot中通过@ConfigurationProperties
或@Value
注解就可以获取配置文件中的属性定义并绑定到Java Bean或属性上,这也是我们平常使用最多的一种方式。但是小胖在开发过程中就遇到一个问题:在做MQ的开发中,配置文件中会配置多个生产者分别提供不同的业务能力,如果通过@ConfigurationProperties
注解来实现的话,这就意味着需要创建多个属性一样的配置类,虽然说可以实现功能,但是很明显,这不是一个很好的设计。场景如下所示:
producer1:
password: xxx
app: xxx
address: url1
enabled: false
producer2:
password: xxx
app: xxx
address: url1
enabled: false
复制代码
实现思路
在我们日常的开发工作中,经常可以见到的是通过自定义注解+拦截器+反射从而实现对权限的校验或者对实体类字段值格式进行校验。那么,我们是不是也可以参考这个思路达到我们的目的呢?答案是肯定的,其实如果对Mabatis等组件比较熟悉的话,就可以看到这样的设计。我们话不多少,开搞~
开搞
以下内容,为了方便,我们将配置相关内容改为人员(people)
自定义配置类读取配置
首先,有一点是不会改变的,我们需要自定义一个配置类,用于读取配置文件中的配置。这里,我们需要改变一下我们配置文件信息里。将所有的配置信息放到一个类里。
my:
peoples:
people1:
userName: 张三
userSex: 男
people2:
userName: 李四
userSex: 女
复制代码
然后,定义一个配置类用来接收,这里通过@ConfigurationProperties
注解实现对配置的注入。要注意,因为我们在peoples下面有很多的people,因此,属性应给定义的是一个MAP的类型。