Hello.
icecream-qaq / rain Goto Github PK
View Code? Open in Web Editor NEWJava Application 开发框架
License: Apache License 2.0
Java Application 开发框架
License: Apache License 2.0
提供一个启动项,使其在启动后可以生成为 GraalVM Native-Image 优化的 jar。
将需要反射扫描的内容,扫描收集整理,生成 MateDataClass。
将需要对类进行增强的内容,或是通过 YuHook 添加的钩子,直接写入源 Class。
将需要反射操作的内容,通过 ASM 向源 Class 直接生成操作方法。
举例:
当依赖注入需要使用反射写值的时候,对源 Class 添加一个 YuCoreInjectSetXXX 的方法,以便运行时可以脱离反射。
AppLoader 增强,支持对同一 Loader,的不同来源进行多次 LoadItem 封装
本 issue 梳理所有有关路由改造的 issue 工作顺序,以及记录工作进度。
额外:
原方案:
扫描被 Action 注解标注的方法。
新方案:
扫描所有注解,并对判断注解是否具有 Action 注解,如果注解具有 Action 注解,则根据注解上标注的 Named 注解确定注解类别。
将 Action 加以分类,以便一个 Controller 内的 Action 可以通过不同注解确定其工作范围。
举例:
在 QQ Robot 上,我们可以通过 @PrivateAction 和 @GroupAction 直接确定 Action 是为群聊还是私聊工作的。
在 Web MVC 上,我们可以通过 @GetAction,@PostAction 等,确定 Action 是为什么请求方法工作的。
依赖注入内容默认不可为空。
Java 用户可通过 Nullable
注解声明可空。
Kotlin 会直接根据类型声明判断可空。
在 Kotlin 的构造函数中,如 parameter 含有默认值,则在注入值为空时尝试使用默认值。
为了保证性能,对于静态路由本级匹配的逻辑依旧保留。
只对动态匹配路由进行下级路由匹配操作。
依赖注入:允许Kotlin构造器注入不需要写 @Inject constructor
JobManager运行时发生的未处理异常能有一个总的捕获方式
为@event提供更多的等级
将按不同的方式写入进实例拆分成多个实现。
java.lang.LinkageError: loader constraint violation: when resolving method 'void me.kuku.yuq.entity.MessageEntity.setArtGroupMessageSource(com.icecreamqaq.yuq.artqq.message.ArtGroupMessageSource)' the class loader com.IceCreamQAQ.Yu.loader.AppClassloader @2df3b89c of the current class, me/kuku/yuq/event/Save, and the class loader 'app' for the method's defining class, me/kuku/yuq/entity/MessageEntity, have different Class objects for the type com/icecreamqaq/yuq/artqq/message/ArtGroupMessageSource used in the signature (me.kuku.yuq.event.Save is in unnamed module of loader com.IceCreamQAQ.Yu.loader.AppClassloader @2df3b89c, parent loader 'app'; me.kuku.yuq.entity.MessageEntity is in unnamed module of loader 'app')
当 @Named
注解值为 '{' 开头,'}' 结尾时则认为其中内容是配置名称。
就酱
对 Kotlin 提供一个 by inject(name = "") 方式使用依赖注入。
原方案:
当路由为:aaa/bbb
ActionInvoker 将位于 根路由/aaa/bbb。
新方案:
当路由为:aaa/bbb
ActionInvoker 将位于 根路由/aaa
后续/bbb 将转由 ActionInvoker 判断。
转换后,将能提供路由中值的智能 Default 填充,以及后续的可选路由参数。
举例:
路由为:aaa/[bbb]/[ccc]
原有路由方案当 bbb/ccc 为空时则无法触发路由。
新方案根据所选参数,可以在 bbb/ccc 为空时,自动根据 Default 声明自动添加默认值。
希望能添加名片赞,以及在发送消息5000ms的时候提供一个错误日志,以及推送一个发送消息失败的日志
原有路由分词结构为数组,不够灵活且无法调整。
将路由分词修改为双向链表,方便路由处理过程中替换,修改,增加新的路由节点,以供完成更复杂的分词。
将 YuHook 移出黑名单。
并从父 ClassLoader 向本 ClassLoader 的 YuHook 传递注册信息。
AppStopEvent事件未响应
为避免套娃响应,监听异常通知的事件监听器如果产生异常,则不再向监听器提交。
将原本位于 YuContext 的读取内容,拆分到不同的实现,提供模块化方案。
提供 InstanceField 注解,允许标记于 getter 与 setter,将根据名字映射为被 Hook 目标方法的所属类的目标 Field 的 getter 与 setter。
在 HookRunnable 被加载时,注入实现 getter 与 setter 的字节码。
如果必要,为目标 Field 在目标类生成 getter 与 setter 避免修改可见性。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.