学习开源项目Halo(三)

研究完Halo的国际化是怎么实现的,接下来就是研究Halo的其他功能是怎么实现的。对于没有研究过项目的人来说第一步上手是不太容易,但是,经历过前两篇的研究,现在研究起来应该就很容易了。首先,还是先看一下它的第一个小小的功能,当我们第一次打开它的首页http://localhost:8090的时候,它会自动重定向到http://localhost:8090/install。Halo是怎么实现的呢?我想大家肯定都知道,就是拦截器呗,没错,我们看它的源代码,在config包下WebMvcAutoConfiguration类里

我们可以看到,重点就是这个InstallInterceptor拦截器,它拦截了所有的请求,我们进入它的拦截方法里看一看发现,代码也是相当的简单就是判断一下博客设置的属性里是否已经安装,没有就重定向到/install

   @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {

        if (StrUtil.equals(TrueFalseEnum.TRUE.getDesc(), OPTIONS.get(BlogPropertiesEnum.IS_INSTALL.getProp()))) {
            return true;
        }
        response.sendRedirect("/install");
        return false;
    }

没错,就是这么简单,可能会有人问了,这么简单的东西为什么还要拿出来说一下呢?当然是为了凑字数啊!!!不过除了凑字数之外呢我还想吐槽一下这个springboot版本的问题,多少次了,我以前创建的sringboot2.1.1做一个demo老是不对,就是不出效果,就像这个拦截器,我跟作者一样,都是弄个拦截器拦截所有的请求,但是它偏偏就是有问题。然后换了个springboot版本,它就好了,就上升了0.0.1个版本,就不一样了,真真是神奇。我每次得打开三个项目,Halo、springboot2.1.1、springboot2.1.2。其中Halo用来研究项目源代码。研究的有点心得之后就会用springboot2.1.1用来做一个demo复现一下,demo失败还半天找不到原因的,我就用springboot2.1.2重新做一遍,一模一样的代码,它就能成功了。

其实,研究到这里,我们就知道接下来该怎么研究了,就是照着功能跟着源代码走读就行了,请求发过来肯定是要先进入拦截器,拦截器处理完,就进入controller,然后调用service,service层再调用持久层(repository包)这样根据mvc的模式,就能把代码走读一遍,而且这个博客的业务逻辑不复杂,只要认真看大部分肯定都看得懂,我们学习的不仅是代码怎么写,还要学学大佬的代码设计、思想之类的东西。

最后我想说的是,自学虽然费时间,而且可能还会遇到很多困难,但是在这个过程中我们收获了自学能力。随着我们自学的东西越来越多,会发现我们学的越来越快,遇见新的东西知道怎么上手,遇见问题知道怎么去搜索并解决。这也是很重要的能力,可能我现在水平见识有限,这些都是浅见,看看就行了。

发布了24 篇原创文章 · 获赞 9 · 访问量 6041

猜你喜欢

转载自blog.csdn.net/SiuMu_/article/details/102956525