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); } }
经验总结扩展阅读
- 常用的论证方法有哪些
- 什么花花语是错过的爱
- 用电器是将什么能转化成什么能
- Docker | 镜像浅析,以及制作自己的镜像
- 车公庙丰盛町有什么好吃的
- 贫血食补补什么
- 禁止焦虑的签名短句 引人深思的好听签名
- 青菜肉丝面的做法
- 心累的低调又含蓄的签名 星星说它累了让我别许愿了
- 美国NBA的球星乔丹的全名