基于Netty的TCP服务框架( 二 )

Jtcp-core自定义实现一个IOC容器,可对消息处理handler进行管理,并通过注解的方式制定消息转发机制 首先遍历main函数下所有class类,并缓存所有指定注解@JtcpComponet的class类对象并注入sproutBeanFactory实例工厂
    /**     * 缓存所有指定注解的class<?>类对象     * @param packageName     * @return     * @throws Exception     */    public static Map<String, Class<?>> getBean(String packageName) throws Exception {        if (componetMap == null) {            Set<Class<?>> clsList = getClasses(packageName);            if (clsList == null || clsList.isEmpty()) {                return componetMap;            }            componetMap = new HashMap<>(16);            for (Class<?> cls : clsList) {                Annotation annotation = cls.getAnnotation(JtcpComponet.class);                if (annotation == null) {                    continue;                }                JtcpComponet sproutComponet = (JtcpComponet) annotation;                componetMap.put(sproutComponet.value() == null ? cls.getName() : sproutComponet.value(), cls);            }        }        return componetMap;    }实现方法路由,通过@JtcpRoute并结合上面定义链接、断开、消息接收、超时、异常等事件枚举类型,把触发的网络通信事件转发至指定的业务方法中处理
    /**     * 根据注解调用方法     * @param method     * @param annotation     * @param args     * @throws Exception     */    public void invoke(RouteEnum routeEnum, Object[] args) throws Exception {        Method method = RouterScanner.getInstance().routeMethod(routeEnum);        if (method == null) {            return;        }        Object bean = applicationContext.getBean(method.getDeclaringClass().getName());        if (args == null) {            method.invoke(bean);        } else {            method.invoke(bean, args);        }    }channelRead接收数据并转发
        /**         * 接收消息事件         */        @Override        public void channelRead(ChannelHandlerContext ctx, Object source) {            try {                byte[] dataBytes = (byte[]) source;                JtcpContext sproutContext = new JtcpContext(ctx, dataBytes);                RouteMethod.getInstance().invoke(RouteEnum.OnRecevie, new Object[] { sproutContext });            } catch (Exception ex) {            }        }

推荐阅读