这篇文章主要介绍了Netty中Redant怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
快速启动
Redant 是一个基于 Netty 的 Web 容器,类似 Tomcat 和 WebLogic 等容器
只需要启动一个 Server,默认的实现类是 NettyHttpServer 就能快速启动一个 web 容器了,如下所示:
public final class ServerBootstrap { public static void main(String[] args) { Server nettyServer = new NettyHttpServer(); // 各种初始化工作 nettyServer.preStart(); // 启动服务器 nettyServer.start(); }}
我们可以直接启动 redant-example 模块中的 ServerBootstrap 类,因为 redant-example 中有很多示例的 Controller,我们直接运行 example 中的 ServerBootstrap,启动后你会看到如下的日志信息:
在 redant-example 模块中,内置了以下几个默认的路由:
启动成功后,可以访问 http://127.0.0.1:8888/ 查看效果,如下图所示:
如果你可以看到 "Welcome to redant!" 这样的消息,那就说明你启动成功了。
自定义路由
框架实现了自定义路由,通过 @Controller @Mapping 注解就可以唯一确定一个自定义路由。如下列的 UserController 所示:
和 Spring 的使用方式一样,访问 /user/list 来看下效果,如下图所示:
结果渲染
目前支持 json、html、xml、text 等类型的结果渲染,用户只需要在 方法的 @Mapping 注解上通过 renderType 来指定具体的渲染类型即可,如果不指定的话,默认以 json 类型范围。
如下图所示,首页就是通过指定 renderType 为 html 来返回一个 html 页面的:
IOC容器
从 UserController 的代码中,我们看到 userServerce 对象是通过 @Autowired 注解自动注入的,这个功能是任何一个 IOC 容器基本的能力,下面我们来看看如何实现一个简单的 IOC 容器。
首先定义一个 BeanContext 接口,如下所示:
public interface BeanContext { /** * 获得Bean * @param name Bean的名称 * @return Bean */ Object getBean(String name); /** * 获得Bean * @param name Bean的名称 * @param clazz Bean的类 * @param <T> 泛型 * @return Bean */ <T> T getBean(String name,Class<T> clazz);}
然后我们需要在系统启动的时候,扫描出所有被 @Bean 注解修饰的类,然后对这些类进行实例化,然后把实例化后的对象保存在一个 Map 中即可,如下图所示:
代码很简单,通过在指定路径下扫描出所有的类之后,把实例对象加入map中,但是对于已经加入的 bean 不能继续加入了,加入之后要获取一个 Bean 也很简单了,直接通过 name 到 map 中去获取就可以了。
现在我们已经把所有 @Bean 的对象管理起来了,那对于依赖到的其他的 bean 该如何注入呢,换句话说就是将我们实例化好的对象赋值给 @Autowired 注解修饰的变量。
简单点的做法就是遍历 beanMap,然后对每个 bean 进行检查,看这个 bean 里面的每个 setter 方法和属性,如果有 @Autowired 注解,那就找到具体的 bean 实例之后将值塞进去。