Bean Validation对象验证标准

Java’s standard for object validation最早在Java EE6中提出,作为Bean Validation 1.0(JSR-303)。它定义了一种在Java对象上执行声明性验证的方式,提供了一个运行时的数据验证框架。更多详细内容可以参考官网:https://beanvalidation.org

Bean Validationn可以让代码变得更简洁清晰,让开发人员在定义数据模型时不必考虑实现框架的限制。当然它不止提供了一些基本的constraint,也可以自定义验证规则,在实际的开发中,可以根据自己的需要组合或开发出更加合适的constraint。

关于代码评审的一些总结

很多团队都会面临这样的问题,开发人员水平不一,想法不同,代码写出来各有各的风格,但是review又费时费力,总之很难让所有成员保持统一风格。以下是一些关于代码质量管理与提升的思考,也参考总结了他人的一些经验。

Netty NioEventLoop

Java Nio是对多路复用IO模型的实现,其核心在于借助操作系统提供的选择器实现对连接的监听,然后应用服务只需对就绪的连接事件进行处理即可,比如可读可写等,这样就降低了应用服务在并发场景下的线程资源压力。

Netty中设计了专门的NioEventLoop来封装对Nio事件的处理,其思路是给每个NioEventLoop初始化一个选择器Selector,然后将通道对Selector的注册转化成对NioEventLoop的注册,这样可以让每个NioEventLoop各司其职,只负责处理注册到自己身上的通道事件,从而即实现了通道事件的多线程处理,同时又避免了过程中的线程安全问题。

Netty Future & Promise

在Java中,对于异步操作结果的获取抽象出了一个接口Future<V>,它提供了一些方法来检查或等待操作是否完成,以及获取操作的结果,同时还提供了取消操作的能力,以及提供了检测操作是正常结束还是被取消的方法。不过如果操作已经完成了,就不能再对其进行取消了。在某些场景下,如果只是想借助Future实现操作取消的能力,而不关心操作结果,那么可以返回空即可。

A Future represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve the result of the computation.
The result can only be retrieved using method get when the computation has completed, blocking if necessary until it is ready. Cancellation is performed by the cancel method. Additional methods are provided to determine if the task completed normally or was cancelled. Once a computation has completed, the computation cannot be cancelled. If you would like to use a Future for the sake of cancellability but not provide a usable result, you can declare types of the form Future<?> and return null as a result of the underlying task.

Netty NioEventLoopGroup

在Java中,任务执行的主要抽象不是Thread,而是Executor,它提供了一种标准的方式将任务的提交过程与执行过程解耦开来,为灵活而强大的异步任务执行框架提供了基础,线程池ThreadPoolExecutor便是在此基础上实现的一套异步执行框架。

Netty也在Executor的基础上自定义实现了一套高性能的任务执行框架,本文尝试从I/O事件执行器NioEventLoopGroup作为切入点对其中的部分源码做一些分析,希望能从别人的设计中汲取一些思路和启发。建议在分析Netty中的任务执行机制之前先对Java中原生的任务执行框架有所了解,可以参考笔记: