加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

发布时间:2019-02-20 23:36:09 所属栏目:建站 来源:逅弈
导读:进修 Netty 也有一段时刻了,为了更好的把握 Netty,我手动造了个轮子,一个基于 Netty 的 web 框架:redant,中文叫红火蚁。建设这个项目标目标首要是进修行使 Netty,俗话说不要等闲的造轮子,可是通过造轮子我们可以学到许多优越开源框架的计划思绪,编

然后我们必要在体系启动的时辰,扫描出全部被 @Bean 注解修饰的类,然后对这些类举办实例化,然后把实例化后的工具生涯在一个 Map 中即可,如下图所示:

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

代码很简朴,通过在指定路径下扫描出全部的类之后,把实例工具插手map中,可是对付已经插手的 bean 不能继承插手了,插手之后要获取一个 Bean 也很简朴了,直接通过 name 到 map 中去获取就可以了。

此刻我们已经把全部 @Bean 的工具打点起来了,那对付依靠到的其他的 bean 该怎样注入呢,换句话说就是将我们实例化好的工具赋值给 @Autowired 注解修饰的变量。

简朴点的做法就是遍历 beanMap,然后对每个 bean 举办搜查,看这个 bean 内里的每个 setter 要领和属性,假若有 @Autowired 注解,那就找到详细的 bean 实例之后将值塞进去。

setter注入

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

field注入

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

通过Aware获取BeanContext

BeanContext 已经实现了,那怎么获取 BeanContext 的实例呢?想到 Spring 中有许多的 Aware 接口,每种接口认真一种实例的回调,好比我们想要获取一个 BeanFactory 那只要将我们的类实现 BeanFactoryAware 接口就可以了,接口中的 setBeanFactory(BeanFactory factory) 要领参数中的 BeanFactory 实例就是我们所必要的,我们只要实现该要领,然后将参数中的实例生涯在我们的类中,后续就可以直接行使了。

那此刻我就来实现这样的成果,起首界说一个 Aware 接口,全部其他必要回调塞值的接口都担任自该接口,如下所示:

  1. public interface Aware { 
  2.  
  3.  
  4. public interface BeanContextAware extends Aware{ 
  5.  
  6.     /** 
  7.      * 配置BeanContext 
  8.      * @param beanContext BeanContext工具 
  9.      */ 
  10.     void setBeanContext(BeanContext beanContext); 

接下来必要将 BeanContext 的实例注入到全部 BeanContextAware 的实现类中去。BeanContext 的实例很好获得,BeanContext 的实现类自己就是一个 BeanContext 的实例,而且可以将该实例配置为单例,这样的话全部必要获取 BeanContext 的处所都可以获取到统一个实例。

拿到 BeanContext 的实例后,我们就必要扫描出全部实现了 BeanContextAware 接口的类,并实例化这些类,然后挪用这些类的 setBeanContext 要领,参数就传我们拿到的 BeanContext 实例。

逻辑理清晰之后,实现起来就很简朴了,如下图所示:

Netty 拭魅战:怎样编写一个麻小俱全的 Web 框架

Cookie打点

根基上全部的 web 容器城市有 cookie 打点的手段,那我们的 redant 也不能落伍。起首界说一个 CookieManager 的接口,焦点的操纵 cookie 的要领如下:

  1. public interface CookieManager { 
  2.  
  3.     Set<Cookie> getCookies(); 
  4.  
  5.     Cookie getCookie(String name); 
  6.      
  7.     void addCookie(String name,String value); 
  8.  
  9.     void setCookie(Cookie cookie); 
  10.  
  11.     boolean deleteCookie(String name); 
  12.  

个中我只罗列了几个焦点的要领,其它有一些差异参数的重载要领,这里就不具体先容了。最要害的是两个要领,一个是读 Cookie 一个是写 Cookie 。

读 Cookie

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读