内容简介: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 发布,更小更快更自由》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Zstandard 1.4.1 发布,解压速度更快
- Firefox 61 正式发布:速度更快,操作更智能
- Inferno 7.1.9 发布,包变小,安装更快
- 蚂蚁金服 AntV F2 3.6 发布,更强!更快!
- Visual Studio 2017 15.4 正式发布,更快更好用
- Swift 4.2 正式发布:泛型改进,更快更兼容!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。