Solon 1.1 发布,更小更快更自由

栏目: 软件资讯 · 发布时间: 4年前

内容简介:Solon 是一个微型的Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。 Solon 强调:克制+简洁+开放的原则;力求:更小...

Solon 是一个微型的 Java 开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。

Solon 强调:克制+简洁+开放的原则;力求:更小、更快、更自由的体验。

所谓更小:

内核0.1m,最小web开发单位1m(相比Springboot项目包,小到可以乎略不计了)

所谓更快:

本机helloworld测试,qps达10万之多。可参考:《helloworld_wrk_test

所谓更自由:

代码操控自由:

//可以容器自动
@XController
public class DemoController{
    @XInject("${db}")
    Map<String,String> db;
    
    @XInject
    UserService userService;
    
    @XMapping("/user/update")
    public void udpUser(UserModel user){
        userService.updateById(user);
    }
}

//可以按需手动
Map<String,String> db = XApp.cfg().getMap("db");
UserService userService = Aop.get(UserService.class);
XApp.global().post("/user/update", x-> userService.updateById(x.paramMap()));

框架选择自由:

可以用solon-web这样的快速开发集成包。也可以按项目需要选择不同的插件组装,比如:为非Solon项目添加solon.boot.jlhttp,0.1m即可让项目实现http+mvc支持。

此次重大版本发布,更新如下:

一、增加事务支持@XTran

@XController
public class DemoController{
    @Db
    BaseMapper<UserModel> userService;
    
    @XTran
    @XMapping("/user/update")
    public void udpUser(int user_id, UserModel user){
        userService.updateById(user);
    }
}

出于用户迁移成本考虑,@XTtran 事务策略与 Spring 的 @Transactional 基本一致。但增加了多数据源事务的友好支持。

二、增加缓存操控支持@XCache

@XController
public class DemoController{
    @Db
    BaseMapper<UserModel> userService;
    
    @XCacheRemove(tags = "user_${user_id}")
    @XMapping("/user/update")
    public void udpUser(int user_id, UserModel user){
        userService.updateById(user);
    }
    
    @XCache(tags = "user_${user_id}")
    public UserModel getUser(int user_id){
        return userService.selectById(user_id);
    }
}

缓存的处理参考了Weed3框架的缓存接口设计,基于Tag进行操控和管理,屏避了Key的麻烦(Key弄不好,可能会冲突)。

三、增加验证支持@XValid

@XValid  
@XController
public class DemoController {

    @NoRepeatSubmit
    @NotNull({"name", "icon", "mobile"})
    @XMapping("/valid")
    public String test(String name, String icon, @Pattern("13\\d{9}") String mobile) {
        return "OK";
    }

    @Whitelist
    @XMapping("/valid/test2")
    public String test2() {
        return "OK";
    }
}

@XValid会为控制器开启校验能力,其也可以作用在一个基类上。XValid的机制,是在Action执行之前对上下文进行较验。更多参考《Solon的校验框架使用、定制与扩展

四、增加渲染的自我控制支持

//示例:定制统一输出控制基类
//
@XValid
public class UapiBase implements XRender {
    @Override
    public void render(Object obj, XContext ctx) throws Throwable {
        if (obj == null) {
            return;
        }

        if (obj instanceof String) {
            ctx.output((String) obj);
        } else {
            if (obj instanceof ONode) {
                ctx.outputAsJson(((ONode) obj).toJson());
            } else {
                if (obj instanceof UapiCode) {
                    //此处是重点,把一些特别的类型进行标准化转换
                    //
                    UapiCode err = (UapiCode) obj;
                    obj = XResult.failure(err.getCode(), UapiCodes.getDescription(err));
                }

                if (obj instanceof Throwable) {
                    //此处是重点,把异常进行标准化转换
                    //
                    Throwable err = (Throwable) obj;
                    obj = XResult.failure(err.getMessage());
                }

                ctx.outputAsJson(ONode.stringify(obj));
            }
        }
    }
}

//应用这个基类
//
@XController
public class DemoApi extends UapiBase {
    //此处的@NotEmpty验证,如果没通过会抛出UapiCode
    @NotEmpty({"type", "value"})
    @XMapping("/run/whitelist/check/")
    public String run(XContext ctx, String type, String value) throws Exception {
        String tags = ctx.param("tags", "");

        if (tags.contains("client")) {
            if (DbWaterCfgApi.whitelistIgnoreClient()) {
                return "OK";
            }
        }

        if (DbWaterCfgApi.isWhitelist(tags, type, value)) {
            return ("OK");
        } else {
            return (value + ",not is whitelist!");
        }
    }
}

五、增加Servlet Api亲和度

  • 支持 ServletContainerInitializer 配置
public class DemoConfiguration implements ServletContainerInitializer{
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        //...
    }
}
  • 支持 Servlet api 注解
@WebFilter("/demo/*")
public class DemoFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        res.getWriter().write("Hello,我把你过滤了");
    }
}

还有更多的细节打磨数不胜数,就不唠叨了。感谢某些人的一路支持。希望更多的人尝试Solon...


以上所述就是小编给大家介绍的《Solon 1.1 发布,更小更快更自由》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具