ntbrick.core总体介绍

版权声明:本文为博主原创文章,如需转载请注明出处 https://blog.csdn.net/linghuanxu/article/details/88938010

背景及目的

ntbrick这个框架,我已经琢磨了几年了,最近一年左右有意识的在经历的项目中抽象和提炼core相关的框架,目前来说,核心内容相对已经比较稳定,虽然还很简单,因为我觉得没那么多东西需要抽象,或者抽象到core这个层面。而且,一些实现方式也经历了几次变革,现在我个人认为,可以作为第一版的定型了。所以,这一系列的文章,就是讲解core中的内容的。聊聊,为什么会加入这么个东西,聊聊为什么这些东西这么写。
  顺带说下,这个core的基础依赖是springboot2.0,spring我们用到了5.0,jdk是11 。虽然不是必要的,但是,还是先定到这里。因为这个项目目前就我一个人写,我写的又比较慢,为了不经常更换这些,就用的比较新,这样必须要换的时间,会晚点来。
  目前的这个版本,我们姑且定义为0.1.0吧。

目录

  • 基础:这里包含了两个内容,我认为是这里最基础的部分,就是lifecycle和exception。lifecycle中,定义了core使用的上下文。我们这里上下文用的是spring上下文。exception中定义了在core中使用的基础异常类型,也定下来未来异常扩展的基调。
  • key: 这个吧,就是之前写的雪花算法,用来一年了,没啥毛病,就固话在这里了,依赖少全局用,挺方便的。https://blog.naturetrible.com/index.php/78/ntbrick/nature/
  • Utils: 这个章节比较零散,因为都是项目中用到的,然后抽象出来的,目前来说,个人觉得比较有用的是:ValidateUtil,RandomCodeUtil,ByteUtil,JsonUtil。

基础

这里如果只介绍目标啥的,似乎没啥东西。因为我的core包目前就这么点东西,至于web环境下需要配的东西,其它环境下需要配的东西,由于需要的环境会减少普适性,所以不会出现在core包里,不过后面可以考虑抽象一个webtool包,供给web项目使用。所以,这里我们把基础的内容介绍下吧。因为key介绍过了,所以util就留到各个主题去介绍吧。

lifecycle

这个问题是我在思考,如何无侵入性的初始化我的框架下的模块时,想到的模块。它通过管理框架共有的上下文内容来提供框架内容模块在指定生命周期中初始化自己的扩展。spring似乎也有类似的功能,但是,在过去,我一直没有搞清楚spring上下文的嵌套关系,同时,spring也可以通过制定配置文件再重新初始化一个上下文,导致我想管理的时候告诉我找不到bean。所以,这个环节的基本思路,就是在spring初始化的时候,把spring的上下文拿过来一个引用,存着,后面框架里都用这个。
  早期,我尝试过在ApplicationContextAware接口中将上下文获取过来,存起来。但是,获取哪个呢,怎么才能不进行重复获取呢?最早的时候,我是判断parent为root的上下文就好了。一直用得好好的,结果,上springcloud的时候,没有这样的上下文了,根的变成了bootstrap了。我就琢磨着呀,这东西,不靠谱呀。最后,就决定将我的框架和springboot绑定起来,于是,我就耦合了ApplicationListener,我写了一个类,实现了这个接口,如下:

package com.ntbrick.framework.core.lifecycle;

/**
 * 应用程序启动后准备完成之后的回调处理器
 */
public class ApplicationPreparedEventHandler implements ApplicationListener<ApplicationPreparedEvent> {
    @Override
    public void onApplicationEvent(ApplicationPreparedEvent applicationPreparedEvent) {

        //初始化ntbrick的上下文
        NtbrickContext.initialContext(applicationPreparedEvent.getApplicationContext());
    }
}

使用的代码如下:

public class StartApplication {
    public static void main(String[] args){
        SpringApplication springApplication = new SpringApplication(StartApplication.class);
        springApplication.addListeners(new ApplicationPreparedEventHandler());
        springApplication.run(args);
    }
}

在应用程序类中加入这个监听器即可,既不会重复初始化,也不会有获取错上下文的问题。
  这是一切的前提,也是一切的核心。虽然,在core包里还有不少是不需要依赖于lifecycle的,但是,我还是希望以此为一切的前提,建立整个框架。至于后面是否能够找到无侵入的方法来做,后面再改进吧。

exception

这里,其实只有两个类。一个是全局的基础异常类,是个抽象类:

/**
 * 基础异常类,不可被实例化
 * @author  nature
 */
public abstract class BaseException  extends RuntimeException {
    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

    public BaseException( Throwable cause) {
        super(cause);
    }

    public BaseException(String message) {
        super(message);
    }

    public BaseException() {
        super("ntbrick基础异常");
    }

}

一个是core包的异常类,为了图省事,我各个地方就都用这个异常类了。除非有特殊需求,才会再自定义一个,如下:


/**
 * core包通用异常类
 * @author nature
 */
public class NtbrickCoreException extends BaseException {

    public NtbrickCoreException(String message, Throwable cause) {
    super(message,  cause);
    }

    public NtbrickCoreException(Throwable cause) {
        super( cause);
    }

    public NtbrickCoreException(String message) {
        super(message);
    }

    public NtbrickCoreException() {
        super();
    }

}

值得注意的是,我这里没有异常编号,取而代之的是全部通过异常类型和异常描述来进行区别。因为,编号,我实在是想不出其全局通用性。一般我也懒的维护一个全局的编号。既然没想通,就不要,想通了再加,欢迎交流。

总结

其实,对于ntbrick.core来说,核心就这么两个包。说是核心,其实就是一切的基础。后面,我会分批次得介绍其中的功能。

猜你喜欢

转载自blog.csdn.net/linghuanxu/article/details/88938010