基于注解的富客户端窗口生命周期管理方法及系统与流程

摘要: 本发明涉及桌面应用程序开发,更具体地说,本发明涉及基于注解的富客户端窗口生命周期管理方法及系统。背景技术:1、javafx是java平台上的主流富客户端界面框架...
基于注解的富客户端窗口生命周期管理方法及系统与流程

本发明涉及桌面应用程序开发,更具体地说,本发明涉及基于注解的富客户端窗口生命周期管理方法及系统。

背景技术:

1、javafx是java平台上的主流富客户端界面框架,广泛用于开发跨平台桌面应用程序。在传统javafx开发模式中,界面布局主要依赖fxml文件进行声明式定义,通过fxmlloader在运行时加载解析fxml文件并与controller类绑定,控制器的实例化及依赖注入需借助第三方框架或手动管理。

2、当企业级桌面应用需要集成spring框架以获得依赖注入、事务管理等能力时,现有方案存在以下不足:

3、1、界面定义强依赖fxml文件,界面结构与java代码分离,开发维护需在两种文件间切换,fxml不具备编程语言的流程控制与逻辑表达能力,复杂界面xml标签嵌套深、可读性差;

4、2、javafx的application生命周期由javafx运行时管理,spring的applicationcontext生命周期由spring管理,两者的启动顺序、线程模型与关闭时机存在冲突,现有集成方案要么不支持spring全部特性,要么集成配置繁琐;

5、3、缺乏统一的窗口生命周期管理机制,窗口初始化、展示后刷新、关闭后资源清理等阶段需开发者手动注册事件监听器,代码分散易遗漏;

6、4、缺乏窗口单例缓存与非单例创建的灵活控制,频繁打开关闭的窗口反复实例化造成资源浪费,或缓存窗口资源得不到及时释放导致内存泄漏;

7、5、多窗口父子关系与层级维护需手动实现,缺乏统一的窗口层级栈管理;

8、6、bean工厂与窗口管理强耦合,无法在不修改窗口管理代码的前提下切换依赖注入实现,环境适配性差。

9、针对上述缺陷,本发明提供了基于注解的富客户端窗口生命周期管理方法及系统。

技术实现思路

1、为实现上述目的,本发明提供如下技术方案:

2、一方面,本发明提供了基于注解的富客户端窗口生命周期管理方法,包括:

3、s1、通过窗口定义注解声明窗口的配置属性,配置属性至少包含窗口尺寸、窗口模态类型、是否为单例窗口及是否维护窗口层级栈;

4、s2、响应于窗口创建指令,通过统一的bean工厂接口获取控制器实例,bean工厂接口为可插拔策略接口,具有反射bean工厂实现和容器bean工厂实现两种模式;

5、s3、在控制器实例创建后,通过反射查找并执行该控制器中标注有初始化注解的方法,获取场景根节点,基于场景根节点创建场景,并根据窗口定义注解配置窗口属性与场景属性;

6、s4、将控制器与窗口的关联关系存入窗口-控制器关联缓存,若窗口定义注解配置为单例窗口,则将控制器与窗口的关联关系存入控制器-窗口缓存;

7、s5、若窗口定义注解配置为维护窗口层级栈,则将窗口压入窗口层级栈,并将窗口层级栈的栈顶窗口设置为窗口的所有者窗口;若配置为不维护窗口层级栈,则跳过入栈及所有者设置操作;

8、s6、为窗口注册窗口展示事件监听器和窗口隐藏事件监听器,窗口展示事件监听器用于在窗口展示后执行该控制器中标注有展示回调注解的方法,窗口隐藏事件监听器用于在窗口隐藏后从窗口-控制器关联缓存中获取与窗口关联的控制器集合,并执行该控制器集合中各控制器的清理注解标注方法;

9、s7、从窗口层级栈中移除窗口,并清空窗口-控制器关联缓存中与窗口对应的记录;

10、s8、响应于界面线程安全执行指令,自动判断当前线程是否为界面线程,若否,则通过异步线程切换机制将任务提交至界面线程执行;若是,则直接执行。

11、优选地,步骤s1中,窗口定义注解的配置属性还包括窗口标题、窗口最小尺寸、窗口最大尺寸、是否可拉伸、图标路径、层叠样式表路径、窗口装饰样式、是否为主窗口、是否居中展示中的一种或多种。

12、优选地,步骤s2中,反射bean工厂实现用于非依赖注入容器环境,通过反射机制查找构造函数并递归解析构造参数依赖,内置基于线程局部变量的循环依赖检测机制;

13、容器bean工厂实现用于依赖注入容器环境,直接委托给依赖注入容器的bean获取方法。

14、优选地,步骤s2之前,在依赖注入容器环境下,通过监听依赖注入容器的上下文刷新完成事件触发窗口管理方法的初始化,具体包括:监听上下文刷新完成事件,判断当前上下文是否为根上下文,若是则获取依赖注入容器的上下文,将上下文的bean获取方法作为bean工厂接口的容器bean工厂实现,完成窗口管理器的全局初始化。

15、优选地,步骤s3中,对于配置为单例窗口的控制器,初始化注解标注的方法仅执行一次;

16、对于配置为非单例窗口的控制器,每次创建窗口时均执行初始化注解标注的方法。

17、优选地,步骤s5中,若窗口为主窗口,则窗口层级栈保留主窗口不出栈;

18、步骤s7之后,还包括程序退出时的资源释放步骤:清空控制器-窗口缓存、窗口-控制器关联缓存及窗口层级栈,若当前使用反射bean工厂实现,则清空反射bean工厂的依赖解析上下文。

19、优选地,步骤s6中,窗口展示事件监听器在单例窗口复用展示时,同样执行展示回调注解标注的方法以刷新窗口界面数据;

20、窗口隐藏事件监听器在窗口隐藏时,先执行清理注解标注的方法,再从窗口层级栈中移除窗口,最后从窗口-控制器关联缓存中移除与窗口对应的记录。

21、优选地,还包括在同一窗口内切换场景的步骤:获取目标场景对应的目标控制器实例,通过反射查找并执行目标控制器中标注有展示回调注解的方法,将当前窗口的场景切换为目标控制器对应的新场景,并更新窗口-控制器关联缓存中与当前窗口对应的控制器记录。

22、另一方面,本发明还提供了基于注解的富客户端窗口生命周期管理系统,用于实现上述的方法,包括:

23、多层级注解配置模块,用于提供窗口定义注解、初始化注解、展示回调注解和清理注解,窗口定义注解用于声明窗口的配置属性,初始化注解用于标注窗口场景内容的初始化方法,展示回调注解用于标注窗口展示后的回调方法,清理注解用于标注窗口关闭后的资源清理方法;

24、可插拔bean工厂抽象模块,用于提供统一的bean工厂接口,bean工厂接口具有反射bean工厂实现和容器bean工厂实现两种可切换的模式;

25、窗口管理核心模块,用于响应窗口创建指令,通过可插拔bean工厂抽象模块获取控制器实例,执行初始化注解标注的方法以创建场景,根据窗口定义注解配置窗口属性与场景属性,管理控制器-场景缓存、窗口-控制器关联缓存和控制器-窗口缓存,注册窗口展示事件监听器和窗口隐藏事件监听器,在窗口展示后执行展示回调注解标注的方法,在窗口隐藏后执行清理注解标注的方法;

26、窗口层级栈管理模块,用于基于双端队列维护窗口层级栈,执行窗口入栈、窗口出栈及查询栈顶窗口操作,并在新窗口创建时根据窗口定义注解的配置选择性地将栈顶窗口设置为新窗口的所有者窗口;

27、线程安全任务调度模块,用于响应界面线程安全执行指令,自动判断当前线程是否为界面线程,并在非界面线程时通过异步切换机制将任务提交至界面线程执行;

28、静态工具门面模块,用于封装窗口管理核心模块的功能,提供非容器环境启动入口、容器环境启动入口、新窗口创建入口、场景导航入口及资源释放入口;

29、容器集成模块,用于监听外部依赖注入容器的上下文刷新完成事件,在上下文刷新完成时将容器的bean获取方法作为bean工厂接口的容器bean工厂实现,完成窗口管理器的全局初始化,并在容器关闭时触发全局资源释放。

30、优选地,所述窗口层级栈管理模块在窗口定义注解配置为主窗口时,保留主窗口不出栈,在窗口定义注解配置为不维护窗口层级栈时,跳过入栈及所有者设置操作。

31、本发明的技术效果和优点:

32、1、本发明通过窗口定义注解声明窗口配置属性,通过初始化注解、展示回调注解和清理注解分别标注窗口初始化、展示后刷新及关闭后资源清理三个阶段,开发者无需编写任何标记语言文件即可完成界面构建,界面结构与业务逻辑集中于同一文件;同时,通过统一的窗口展示事件监听器和窗口隐藏事件监听器驱动各生命周期回调方法的自动执行,无需手动注册事件监听器,开发效率与代码可维护性显著提升;

33、2、本发明通过窗口-控制器关联缓存和控制器-窗口缓存对配置为单例的窗口进行复用,开发者仅需通过窗口定义注解的单一属性即可控制窗口为单例模式或非单例模式,兼顾内存优化与数据隔离需求;同时,通过窗口层级栈自动维护窗口入栈与出栈,新窗口创建时自动将栈顶窗口设置为所有者窗口,关闭时自动出栈并清空关联缓存,无需手动维护窗口父子关系,避免引用残留导致的内存泄漏。

34、3、本发明通过统一的bean工厂接口将控制器实例创建抽象为可插拔策略,具有反射bean工厂实现和容器bean工厂实现两种可切换模式,窗口管理核心代码与底层对象创建机制完全解耦,切换运行环境仅需更换bean工厂实现;同时,通过自动判断当前线程并在非界面线程时切换至界面线程执行,确保界面更新操作始终在正确的线程上下文中执行,避免跨线程操作引发的运行时异常,系统运行稳定性得到有效保障。