InitializingBean的使用

213 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

在我们平时开发中我们正常需要读取配置文件,就像我们连接mysql需要读取一样,而我们打开源码会发现很多都是继承了InitializingBean,为什么需要该初始化接口呢,

从JDBC的该实现来看这里是存在一个校验的功能;

我们可以看到该InitializingBean只有一个afterPropertiesSet方法该方法我们从名字看可以发现这是属性设置成功后执行的一个方法,对于InitializingBean的使用是在BeanFactory 设置所有属性后还需要做一些动作的bean的实现的接口:例如执行自定义初始化,或仅检查是否已设置所有必需属性。实现 InitializingBean 的另一种方法是指定自定义 init 方法,例如在 XML bean 定义中。

<bean id="druidDataSource" class="类路径.DataSource"      init-method="init" destroy-method="close" primary="false">

从网上查找的资源我们可以看到该接口的调用AbstractAutowireCapableBeanFactory的invokeInitMethods方法,该方法是检查 bean 是否实现了 InitializingBean 或定义了自定义的 init 方法,如果是,则调用必要的回调。

如果你是InitializingBean,则执行afterPropertiesSet方法,否则执行配置文件里init-method的指定的方法

说到这里了,那么我们可以用它做什么呢,网上找了好一会,并没发现多少类似实际项目用到的文章,我们在这里可以加载配置文件啊,就像JDBC一样,我们定义一个静态类,弄一个全局MAP,在这个全局MAP里塞上我们的配置的值,如果我们的值需要做一些转换,也可以在这里对它进行一些转换,或者我们的属性值有时不同的生产环境可能需要的值不同,又或者有的时候忘记配置文件进行配置,那么我们可以在这里设置个默认值,

有人可能会问了,我完全可以直接读取配置文件的值啊,没必要在这里继承该方法啊,其实这样做有一个好处就是我们如果测试想修改配置文件的值直接调用这个key修改即可,没必要把服务停下来,这应该是目前最方便最简单的动态配置加载了吧;有兴趣可以尝试着写一写;