00:00
好,我们再来说spring boot底层的一个功能配置绑定,来举一个场景例子,我们呢,习惯于把经常爱变化的一些东西,哎,我们配到配置文件里边,比如我们Java基础的时候,我们学过properties这些配置文件,我们以前呢,比如把数据库的一些数据库的连接地址,账号、密码,包括数据库连接池的大小等等这些属性我们配到这个配置文件里边,然后呢,那为了方便,因为我们未来可能要创建数据库连接池,我会把这个配置文件里边的内容又一一解析,解析到我们数据库连接池,比如这个扎B就是我们的这个对象里边,所以呢,我们的这个实现场景就是把properties里边的所有配置绑定到javab里边,那我们这个绑定过程呢,如果用我们Java原生代码来做还是挺麻烦的,大概过程呢,就像是这样,我们使用properties这个类,我们加载来我们的这个配置文件,然后呢,便利配置文件里边的每一个KV值,配的每一个KV值,然后把这个KV值呢一一对应。
01:00
封装到扎比指定的属性里边,这样呢,其实还是简单的复杂一点的,就是假设我给你给的这个配置文件里边乱七八糟配置了100多行的这些配置,我让你在这100多行里边找跟数据与库有关的这四五行,那你可能还需要用到正则表达式等等一大堆的东西,你才能把它解析完成。但是在boot里边,这个过程就会变得非常简单,把这个过程叫配置绑定,我们只需要一个注解configuration properties就行了。好,我们来测试一下,我在这呢举了一个例子,我这写了一个类叫car,这个Jain car看呢有两个属性,一个叫brand品牌,还有一个price我们的价格,我呢现在想把跟汽车有关的东西,我们放到配置文件里边,我们就放到s boot的这个配置文件里边,那我们配置文件呢,我随便写,比如我们叫my car my car,我的汽车的这个品牌,品牌呢,比如我写一个比亚迪,然后呢,My car,我汽车的。
02:00
的这个还有一个价格配一个价格,比如呢,我们就叫什么呢,我们就叫10万,好,现在呢,我配了汽车的两个信息,那如果是以前我们要读取这个配置文件,要给这里边封装很麻烦,现在怎么做一个注解叫configuration properties,那我们翻译过来就叫配置属性,这个里边呢,有一个我们要写的东西就叫prefix,哎,我们来看一下这个prefix跟我们的这个value,其实呢,都是互相Alice for,也就是互相都是别名,我们把这个呢就写一下,然后呢。这个prex我们来指的是这个前缀,前缀的意思就是你我们的这个类里边的每一个属性,跟配置文件哪个前缀下的所有属性一一绑定,我们配置文件里边正好麦卡它的这个品牌名,还有我们的这个价格,跟我们扎币里边的这两个属性一模一样,所以呢,我就把麦卡就写上,然后呢,写上以后呢,我们为了让它生效啊,我们把这个组件呢加到容器中,因为我们容器中的组件才能才能拥有我们boot给它提供的这些强大功能,所以大家一定记住啊,只有在容器中的组件,只有在容器中的组件才会拥有,才会拥有拥有我们这个boot提供的强大功能,提供的强大功能,也就是容器提供的强大功能,比如我们这个配置绑定好,我把它放在容器中,我们可以来测试一下我们的这个。
03:38
卡组件,它里边的这些值是不是默认已经跟配置文件里边麦卡它下边的这些一一绑定上了,我来写一个ctrller进行测试,我在这呢来写一个方法,我就让它返回car这个对象,然后呢,这个car从哪来?因为我们已经把这个car放在容器中了,我标了一个and component,而且呢,它它的这个容器中这个实例的值里边每一个属性的值是跟配置文件绑定的,所以我在这儿想要用的话呢,我直接利用spring的自动注入,我们把容器中的这个卡拿过来就行。
04:15
好,我们来返回这个卡,然后呢,我们来写上一个request map来处理一个请求,就叫car,好,然后我来测试一下。好,我们现在呢,启动成功来访问杠,看我们看能不能得到配置文件里边的东西走来,我们发现配置文件里边比亚10万没问题,得到了,包括如果我们配置文件改了,比如我们把这个比亚迪改成了亚迪,好,我们来启动起来。配置文件改了,我们应用一定要重新启动啊,这是必然的,然后呢,我们在这儿来重新测试刷新好它呢,就能读到我们配置文件里边的值,没有问题。所以我们现在想要让一个渣宾跟配置文件里边的东西一一绑定,那可是太简单了,我们第一种办法就是我们容器中的组件给它标注configuration这个中西,然后呢,第二个办法。
05:17
也有一种简单的办法啊,还不算是简单,还是还有一种写的方式好,我们先把第一种方式拿过来。第一种方式呢,就是我们说的这个方式啊,我们的这个component加configuration properties注解,那第二个方式就是,然后呢,我们还可以写叫enable configuration properties注解,比如我呢,在配置类里边,当然这个一定第二种方式一定要在配置类里边写,因为配置类呢,首先它在容器中,它是容器中的组件,然后呢,接下来我们配置类上写什么才能生效配置类呢,写一个叫enable configuration properties,意思呢就是开启我们属性配置功能,开启谁的属性配置功能,因为我们这个car想要跟人绑定,所以呢,我们把这个卡传进来。
06:06
点class。我们来写一个卡点class。Class。我们把这个car呢导入进来,好,那我们的这个enable configuration properties,它其实就有两个功能,那第一个功能就是我们这个开启我们这个属性配置,属性开启卡的属性配置。功能。你只有开启了car属性配置功能,也就是呢,Car下边的这个属性配置才能生效,想要开启属性配置功能,第一个你明显的标注enable configuration properties开启谁的属性配置功能,第二种办法就是你只要这个组件在容器中,你它呢,默认我们这个提供的这个功能,它就能生效,然后呢,那我们用第二种办法,我开启了这个功能以后,而且它的另外一个作用就是把这个容器,把这个组件再来自动导入容器中,把这个组件,把哪个组件呢,你指定的这个卡,你要为卡开启属性绑定功能,就叫属性,我们就叫配置绑定功能,配置绑定功能然后呢,把卡这个组件自动注入到容器中。
07:25
容器中应该是自动注册到容器中,也就是说呢,我们只要哎只要呢,用这么一个注解,相当于呢,我们就不用写an component了,对吧,因为。有些时候可能是这样子的,我们的这个car,我们有可能是引用的第三方包里边的,那第三方包里边的话,人家类里边没标component,你是不是也不能给人家类投上标啊,那咋办呢?我就可以用这种方式enable把人家第三方包的一整过来,他那两个两个功能,第一个开启了你的配置绑定,第二个,然后把这个卡呢,而且给你自动注册到容器中,然后呢,我们还能测试生效,没有任何问题,我们这个容器中呢,也会有这个卡来稍等一下。
08:13
来测试一个。来刷新同样得到这个内容,但是另外一种我们就写法就是错的,假设呢我们没有用这个,我们呢只说它是属性绑定,而且还没有把它加在容器中。走。你只说一个属性绑定,并没有把它加在容器中,有用没用呢?来看一下。我们的启动都已经报错了,报错的原因就是hello controller里边要用car,这个car在容器中没有,它给你画了一个红色波浪线,容器中没有,所以呢拿不到自动装配失败,所以我们这一块搞错了,所以我们两种办法,你要么呢就把它加在容器中,要么呢你就使用这种开启功能的方式,哎,这两种都行,这是我们说的配置绑定,那有了这个配置绑定,那我们后来呢,其实我们哪怕一一些自定义的配置,比如我们自定义配了一些这些汽车的相关东西,你想绑给哪个渣B就绑给哪个渣B,只是一个注解的问题,哎,我们再也不用写以前那么一堆的代码,而且这个东西呢,我们未来会在spring boot底层,大家经常见到你见到这个东西,那就说明我们这个类里边的所有属性是跟spring boot核心配置文件,就是application properties,你也不能乱七八糟写一个别的文件,它绑定不上是。
09:37
那我们这个核心配置文件里边这个前缀下边的所有东西进行绑定的,好把这个机制大家理解一下。
我来说两句