zoukankan      html  css  js  c++  java
  • Springboot挺好的,为什么要用Mars-Java

      这是一个大部分程序员都会产生的疑问,或者说质疑吧,Springboot那么好用,生态那么全,为什么要用这个刚出道的Mars-Java呢?

      这篇文章就来聊一聊Mars-Java的一些特性。

      首先如果要把这两个框架放在一起比较,那么毫无疑问,Springboot从技术和生态以及安全性上是碾压性的,但是如果抛开这些不谈呢?

      你们一定觉得我在讲笑话,抛开技术,生态,安全性不谈,那这个框架还有啥用?连基本的都没了。 其实非也。

      我们可以一个一个来讲。

      技术比较

      Springboot是基于Spring的二次封装,目的在于减少配置,而Spring是一群大神,花了好几年的时间维护过来的,并且经历了这么多年的实战运用,所以可谓是身经百战,经验丰富的一个框架了,他的算法和性能应该是得到了极致的优化(我猜的,其实没研究过源码)

      而Mars-Java作为一个新兴的框架,自然在这两点上是处于下风的,但是我们都是用java实现的,用的是同一种技术:

      Spring的MVC是基于servlet做得请求拦截,分发,并通过反射执行后面的java类,Mars-Java也是一样的原理

      Spring的AOP是基于动态代理做的,Mars-Java也是一样的

      Spring的IOC是通过反射被属性赋值,Mars-Java也一样

      Spring有自己的JDBCTemplate,Mars-Java也有,而且功能比他更丰富

      所以,我说的技术不如Spring,指的就是经验的差距,而这个可以通过时间来弥补,他缺的只是历练。

      生态比较

      这个就完全无法比了,一个团队花几年做得,跟Mars-Java这个新兴比,数量上就已经碾压了,更不用提什么成熟度了。

      但是,Mars-Java有自己的分布式组件Mars-Cloud,以及正在开发的Mars-Config,后面也会一步步的优化和新增组件

      同样,这个也是可以通过时间来弥补的。

      安全性比较

      虽然我在每次定版本之前,都会用一个专门的测试项目来测试所有的功能,确保不会出bug,但是毕竟缺乏大量的实战经验,所以这一点确实比不上Spring

      这个问题,我正在进行单测的补充,确保覆盖率达到可交付标准

      也就是说,Mars-Java目前就像一个实习生一样,很稚嫩,但是却有无限的可能,要是大家都来支持,一起完善,贡献代码,说不定会成为另一个生态。有竞争才有进步,老是被Spring垄断 就不好玩了。

      说完了对比,接下来说一说Mars-Java的优点

      一、 轻巧,简洁

      这个点,几乎所有的开源项目都会声明一下,好像成了吹牛的标配,但是Mars-Java是真的简洁,我们平时开发一个中小型项目,如果用SpringBoot+Mybatis来做,会引入大量的Jar包,而Mars-Java起码少了一半依赖。

      并且Mars-Java只提取了Springboot里常用的功能点,对于不常用的就直接丢弃了,比如:

      Spring的bean支持Scope,而Mars-Java就只保留了单例

      Spring支持所有连接池,所以需要有专门的代码来做兼容性,而Mars-Java直接内置druid,摒弃其他连接池

      Spring可以跟大部分持久层框架整合,而Mars-Java只支持自己的持久层封装,摒弃其他的持久层框架。

      这么做的目的在于 提供开箱即用的体验,让使用者不需要去纠结该使用什么,就是引入maven坐标,开始写代码,不需要去考虑用什么组合。

      还有一个就是Mars-Java打算走的路线是轻巧的封闭式生态,而不是兼容所有东西的开放性生态。 但是这并不等于违背开源精神,因为Mars-Java生态的所有的项目都是开源的,任何人都可以免费用,可以看源码,可以贡献。 并且如果有第三方愿意兼容Mars-Java,我们也是非常欢迎的

      二、 上手快

      几乎保留了Spring的玩法,只要你会Spring,或者Springboot就可以快速地上手使用他了,这么做,肯定有人会觉得没意义,跟Spring一样,为什么不用Spring呢?

      原因就在于,Mars-Java的核心理念是抽取常用的,抛弃不常用的,所谓取其精华。

      在这个基础上,再去看看有没有自己的新玩法添加进来。

      除了跟Spring玩法相似,我们的文档还是中文的(因为我只会中文,哈哈哈),所以不需要去百度了,直接来Mars-Java官网查看原汁原味的官方文档。

      三、 新玩法

      声明式API

      这个可能不是我首创,但是我觉得很有意义,比如后端要开发一个接口,只需要这样:

      先声明一下

      @MarsApi(refBean = "expApiService")

      public interface ExpApi {

      /**

      * get请求示例

      * http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六

      * @param expVO

      * @return

      */

      List expGetRequest(ExpVO expVO);

      }

      2. 实现这个接口就好

      @MarsBean("expApiService")

      public class ExpApiService implements ExpApi {

      /**

      * 为了让大家可以快速的跑起来,所以本示例没有连接数据库

      * 所以自然也就不会调用dao的方法了,这里注入进来的,只是为了演示IOC的用法

      */ 郑州妇科医院那家好:http://www.zzyytj.com/郑州妇科医院哪里好:http://www.zzyytj.com/郑州治疗妇科哪家医院好:http://www.zzyytj.com/

      @MarsWrite

      private ExpDAO expDAO;

      /**

      * 这个方法上加了aop监听

      * @param expVO

      * @return

      */

      @Override

      @MarsAop(className = ExpAop.class)

      public List expGetRequest(ExpVO expVO) {

      // 打印expDAO,如果不为null就说明已经注入了

      System.out.println(expDAO);

      // 打印接收到的参数,看是否接收成功

      System.out.println(expVO.getName());

      System.out.println(JSON.toJSONString(expVO.getNames()));

      // 返回数据

      return getExpResultData();

      }

      }

      对,你们没看错,Controller层没了,为什么会这样呢?这得从Controller的作用说起,在实际开发中,Controller基本上起到两个作用,一个是参数校验,一个是响应数据。

      在Mars-Java中,参数校验被封装掉了,直接用注解即可,这个可以去官网看文档,响应数据,这个本来就没什么,直接返回就好,不需要去Controller里再返回一次了吧。

      所以,干脆去掉了,让使用者专注在业务逻辑上。

      其他新玩法

      一行注解解决分布式锁

      数据库单表操作不需要写sql

      自带分页组件,直接调用即可

      一个轻巧的,基于rest的分布式组件

  • 相关阅读:
    微信 ios端config配置失败 android端正常
    vscode离线安装插件
    win7中vscode会黑屏或者终端空白,无法输入
    vue中使用svg图片
    a.download下载文件 ---跨域问题
    background 背景图片 --css3
    box-shadow
    兄弟伪类
    canvas画时钟
    轮播图--使用原生js的轮播图
  • 原文地址:https://www.cnblogs.com/sushine1/p/13267255.html
Copyright © 2011-2022 走看看