Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快、更自由的体验。

所谓更小:

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

所谓更快:

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

所谓更自由:

  • 代码操控自由:
// 除了注入模式之外,还可以按需手动
//
//手动获取配置
Map<String,String> db = Solon.cfg().getMap("db");
//手动获取容器里的Bean
UserService userService = Aop.get(UserService.class);
//手动监听http post请求
Solon.global().post("/user/update", x-> userService.updateById(x.paramMap()));
  • 框架选择自由:

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

也可以用快餐方案:solon-web 这个组合包。

本次版本重大变更:

1、增加代码亲和度,降低学习成本;去掉各种类的X前缀

  • 新的Helloworld效果
@Controller
public class App{
public static void main(String[] args){
Solon.start(App.class, args);
} @Mapping("/")
public Object home(Context c){
return "Hello world!";
}
}

2、增加 BeanWrap 语义特性支持

  • 通过语义特性,为Bean增加元信息描述
//
// 这是一个数据主从库的示例
//
@Configuration
public class Config {
//申明 db2 是 db1 为的从库
@Bean(value = "db1", attrs = { "slaves=db2" })
public DataSource db1(@Inject("${test.db1}") HikariDataSource dataSource) {
return dataSource;
} @Bean("db2")
public DataSource db2(@Inject("${test.db2}") HikariDataSource dataSource) {
return dataSource;
}
}

3、发布新组件:SockeD,为服务开发而生的Socket框架。

  • 支持MVC+RPC开发模式
//[服务端]
@Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
@Component(remoting = true)
public class HelloRpcServiceImpl implements HelloRpcService {
public String hello(String name) {
return "name=" + name;
}
} //[客户端]
var rpc = SocketD.create("tcp://localhost:28080", HelloRpcService.class);
System.out.println("RPC result: " + rpc.hello("noear"));
  • 支持单链接双向RPC开发模式(基于上例扩展)
//[服务端]
@Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
@Component(remoting = true)
public class HelloRpcServiceImpl implements HelloRpcService {
public String hello(String name) {
//
//[服务端] 调用 [客户端] 的 rpc,从而形成单链接双向RPC
//
NameRpcService rpc = SocketD.create(Context.current(), NameRpcService.class);
name = rpc.name(name); return "name=" + name;
}
}
  • 支持消息发送+监听开发模式
//[服务端]
@ServerEndpoint
public class ServerListener implements Listener {
@Override
public void onMessage(Session session, Message message) {
if(message.flag() == MessageFlag.heartbeat){
System.out.println("服务端:我收到心跳");
}else {
System.out.println("服务端:我收到:" + message);
//session.send(Message.wrapResponse(message, "我收到了"));
}
}
} //[客户端]
var session = SocketD.createSession("tcp://localhost:28080");
session.send("noear");
//session.sendAndCallback("noear", (rst)->{}); //发送并异常回调
//var rst = session.sendAndResponse("noear"); //发送并等待响应 System.out.println(rst);
  • 支持消息订阅开发模式
//[客户端]
@ClientEndpoint(uri = "tcp://localhost:28080")
public class ClientListener implements Listener {
@Override
public void onMessage(Session session, Message message) {
//之后,就等着收消息
System.out.println("客户端2:我收到了:" + message);
}
}

附:Solon项目地址

最新文章

  1. bzoj 1391
  2. 解决EditText和ScrollView滑动冲突问题
  3. python学习GUIwxpython不支持中文输出入的问题
  4. WP8_读写XML
  5. [PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(三. PHP端代码实现)
  6. .Net MVC4 加.html后缀报404问题
  7. JAVA GUI学习 - 总结
  8. Java操作属性文件与国际化
  9. powershell_基础篇
  10. css设置文字上下居中,一行文字居中,两行或多行文字同样居中。
  11. 结对作业收获_core组
  12. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目
  13. chromedriver与chrome各版本及下载地址
  14. asp.net mvc之TempData、ViewData、ViewBag
  15. 新手MySQL工程师必备命令速查手册
  16. web.xml配置中的log4jRefreshInterval讲解
  17. mxonline实战5,用户注册的验证码
  18. Django - 环境搭建、url、视图、模板、标签、过滤器
  19. 【转】c#中@的3种作用
  20. UICollectionView专题

热门文章

  1. 【mq读书笔记】mq消息存储
  2. EdgeConnect: Structure Guided Image Inpainting using Edge Prediction
  3. ConvTranspose2d
  4. 学习笔记(1):零基础掌握 Python 入门到实战-列表与元祖到底该用哪个?(二)...
  5. springsecurity+springsocial资料收集
  6. NFS服务配置总结
  7. PyQt(Python+Qt)学习随笔:model/view架构中的QStringListModel
  8. Python & PyQt学习随笔:PyQt主程序的基本框架
  9. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的orientation和centerButtons属性
  10. 课堂练习之疫情APP