策略模式+数据库实现业务逻辑

142 阅读3分钟

我正在参加「掘金·启航计划」

昨天无事,好奇的打开了项目代码开始思索起来,由于我们的项目属于规则,所以代码里会有上百个以至更多的规则,而每个规则代表着一个类,他们是如何实现找到对应的业务逻辑的呢?又是如何在启动时加载对应的数据的呢;

如何确保所有业务bean加载完成

首先打个大前提,数据库数据会和我们的业务规则进行绑定,如果业务规则没有写,而我们配置了,会报bean找不到的问题;

接着往下看,我们的每个业务规则都写了一个@Service注解,并将其名称定义为规则代码(唯一),然后我们的加载会去寻找对应的bean实例,这里我们可能会发现我如何确保所有的bean都加载完成了呢,我们到我们的加载类去瞅瞅,发现加载的init对应的类实现了ApplicationListener接口;那么这个接口干啥用的呢?打开百度,我们直接发现,它一般是用于项目初始化动作完成后执行自己业务拓展动作;就是我们的bean都加载完成了,才会去执行它,我们要注意的是我们的项目可能存在两个Context,一个是父容器Root WebApplicationContext;一个子容器本项目的WebApplicationContext;这样我们的接口方法就会被响应两次,所以我们需要控制一下;

ApplicationContext applicationContext = event.getApplicationContext().getParent();
        if (applicationContext == null) {
            return;
        }

如果你为空的时候执行逻辑也可,反正两个Context任一执行别重复就行,执行完后我们就相当于把所有的规则bean都加载进来了;

策略模式应用

加载进来了,那我们可能想在这基础上开始加载一些数据库数据,就在onApplicationEvent方法里写上我们的启动加载逻辑即可,通过applicationContext来获取这个bean,然后将其放入我们的业务map中,这里注意的是我们的业务类需要实现一个共通接口,这样我们获取该bean的时候类型就用这接口类型就行,然后执行业务类里的共通方法,下面是如何获取bean的;

(接口类)applicationContext.getBean(业务类(数据库查询的))

如此加载的时候我们就可以执行这部分逻辑了;对于业务上的执行逻辑,也是同理,只不过是请求进来再次获取该bean,再次调用这个接口的某个方法,来达到业务逻辑的选择,这就是策略模式+数据库的具体实现,简单说就是数据库配置场景,然后我们代码根据策略模式来加载场景,如果你请求,你只要加上这个场景即可;好啦🥗🥗🥗;

结束结束,那就🛴🛴🛴