Netty中Redant怎么用

这篇文章主要介绍了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,启动后你会看到如下的日志信息:

Netty中Redant怎么用

在 redant-example 模块中,内置了以下几个默认的路由:

Netty中Redant怎么用

启动成功后,可以访问 http://127.0.0.1:8888/ 查看效果,如下图所示:

Netty中Redant怎么用

如果你可以看到 "Welcome to redant!" 这样的消息,那就说明你启动成功了。

自定义路由

框架实现了自定义路由,通过 @Controller @Mapping 注解就可以唯一确定一个自定义路由。如下列的 UserController 所示:

Netty中Redant怎么用

和 Spring 的使用方式一样,访问 /user/list 来看下效果,如下图所示:

Netty中Redant怎么用

结果渲染

目前支持 json、html、xml、text 等类型的结果渲染,用户只需要在 方法的 @Mapping 注解上通过 renderType 来指定具体的渲染类型即可,如果不指定的话,默认以 json 类型范围。

如下图所示,首页就是通过指定 renderType 为 html 来返回一个 html 页面的:

Netty中Redant怎么用

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 中即可,如下图所示:

Netty中Redant怎么用

代码很简单,通过在指定路径下扫描出所有的类之后,把实例对象加入map中,但是对于已经加入的 bean 不能继续加入了,加入之后要获取一个 Bean 也很简单了,直接通过 name 到 map 中去获取就可以了。

现在我们已经把所有 @Bean 的对象管理起来了,那对于依赖到的其他的 bean 该如何注入呢,换句话说就是将我们实例化好的对象赋值给 @Autowired 注解修饰的变量。

简单点的做法就是遍历 beanMap,然后对每个 bean 进行检查,看这个 bean 里面的每个 setter 方法和属性,如果有 @Autowired 注解,那就找到具体的 bean 实例之后将值塞进去。

Netty中Redant怎么用