Solon 特性简集,相较于 Springboot 有什么区别?

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

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

所谓更小:

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

具用户反映,某些项目切换到Solon后,可以缩减到原来10%的包大小。

所谓更快:

本机helloworld测试,启动最快可达0.09s,Qps可达12万之多。可参考:《helloworld_wrk_test》。

所谓更自由:

代码操控自由:

// 除了注入模式之外,还可以按需手动 // //手动获取配置 String userName = Solon.cfg().get("user.name"); Properties dbcfg = Solon.cfg().getProp("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.2m即可让项目实现http+rpc开发;还可以用MVC开发Socket应用。

特性简集: 1、与Springboot的常用注解比较 Solon 1.2.12 Springboot 2.3.3 说明
@Inject *   @Autowired   注入Bean(by type)  
@Inject("name")   @Qualifier+@Autowired   注入Bean(by name)  
@Inject("${name}")   @Value("${name}")   注入配置  
@Component   @Component   托管组件  
@Singleton   @Scope(“singleton”)   单例(Solon 默认是单例)  
@Singleton(false)   @Scope(“prototype”)   非单例  
     
@Init *   @PostConstruct   构造完成并注入后的初始化  
@Configuration   @Configuration   配置类  
@Bean   @Bean   配置组件  
@Mapping   @RequestMapping,@GetMapping...   映射  
@Param   @RequestParam   请求参数  
@Controller   @Controller,@RestController   控制器类  
@Service   @Service   服务类  
@Dao   @Dao   数据访问类  

Solon 的 @Inject 算是: Spring 的@Value、@Autowired、@Qualifier 三者的结合,但又不完全等价

Solon 托管的 Bean 初始化顺序:new() - > @Inject - > @Init

注1:@Inject 的参数注入,只在Method@Bean上有效

注2:@Inject 的类型注入,只在@Configuration类上有效

2、重要的区别,Solon不是基于Servlet的开发框架

与Springboot相似的体验,但使用Context包装请求上下文。Helloworld效果如下:

@Controller public class App{ public static void main(String[] args){ Solon.start(App.class, args); } @Inject("${app.name}") String appName; @Mapping("http://www.likecs.com/") public Object home(Context c, @Param(defaultValue="noear") String name){ return appName + ": Hello " + name; } } 3、与Springboot相似的事务支持@Tran

采用Springboot相同的事件传播机制及隔离级别

@Controller public class DemoController{ @Db BaseMapper<UserModel> userService; @Tran @Mapping("/user/update") public void udpUser(long user_id, UserModel user){ userService.updateById(user); } } 4、与Springboot不同的较验方案@Valid

Solon 的方案更侧重较验参数(及批量较验),且强调可见性(即与处理函数在一起)

@Valid @Controller public class DemoController { @NoRepeatSubmit @NotNull({"name", "icon", "mobile"}) @Mapping("/valid") public String test(String name, String icon, @Pattern("13\\d{9}") String mobile) { return "OK"; } @Whitelist @Mapping("/valid/test2") public String test2() { return "OK"; } } 5、基于标签管理的缓存支持@Cache,与Springboot略有不同

基于标签管理,避免不必要的KEY冲突

@Controller public class DemoController{ @Db BaseMapper<UserModel> userService; @CacheRemove(tags = "user_${user_id}") @Mapping("/user/update") public void udpUser(int user_id, UserModel user){ userService.updateById(user); } @Cache(tags = "user_${user_id}") public UserModel getUser(int user_id){ return userService.selectById(user_id); } } 6、具备语义特性的Bean定义,实现更多可能性

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfsdz.html