基于Netty实现一个类SpringMVC的轻量级Java服务端Web开发框架

之前学的Netty忘了,现在再捡起来,想着使用Netty来做一个项目,就做了这个简单框架。整个框架都是仿照Spring和SpringMVC来做的,一部分思路参考了Github上另一个项目。[^1]

简介

  • IOC容器:使用@Component注解,将类注册到IOC容器中,使用@Autowired自动注入
  • 自定义路由:使用@Controller,@RequestMapping注解自定义路由
  • 自动参数转换:支持对BeistHttpRequest,BeistHttpResponse(类似于HttpServletRequest)自动赋值,支持将RequestBody中的数据自动转换为JavaBean
  • Restful风格的API:可以使用@PathVariable获取URL中的值
  • 支持Cookie和Session
  • 拦截器:通过实现Interceptor来实现自定义拦截器,需要配置文件中配置Interceptor包的位置,支持使用Order来定义Interceptor的优先级
  • 类似于Spring简易的组合注解
  • 目前只支持Json的响应方式
  • AOP:暂未实现
  • 统一异常处理:还有点问题
  • 目前还没有实现@Bean注解,没有思路
  • 异步执行:暂未实现,不过应该不会太难,因为Netty天然支持异步

启动服务器

只需要启动一个 Server, 就能快速启动一个 web 容器了,如下所示:

public class ServerBootstrap {
    public static void main(String[] args) {
    //创建一个服务器,把要扫描的包传入。启动非常简单
        BeistServer server = new BeistServer("com.gsk.demo");
        try {
            server.start();
        }catch (Exception e){
            server.shutdown();
        }
    }
}

Controller

创建一个Controller和SpringMVC注解方式一样,在一个类的上面加上@Controller,就说明这个类是一个Controller,这里的@Controller组合了@Component注解,所以在扫描的时候,会自动将Controller注入到IOC容器中,使用@Autowired给Bean自动注入,这里的@Autowired必须加上beanName,默认是类名首字母小写。
看着和SpringMVC的代码一样
看一下响应结果
在这里插入图片描述
在这里插入图片描述

Interceptor

实现Interceptor接口,来实现拦截器
在这里插入图片描述
拦截器中打印的值
在这里插入图片描述

被托管的User

这里@Component默认使用单例模式,可以使用prototype = true来实现Spring中Scope注解的prototype模式
在这里插入图片描述
[^1]Netty 实战:如何编写一个麻小俱全的 web 容器

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页