精通Spring Boot 3 : 使用 Kotlin 创建用户应用程序项目
如果 Kotlin 是您首选的编程语言(假设您已经安装了 Kotlin),本节将演示如何使用 Kotlin 而不是 Java 创建 Users App 项目。如果您访问 start.spring.io 并选择 Kotlin 编程语言,您可以生成项目并导入到您喜欢的 IDE 中。请参见图 1-8。
图 1-8 使用 Kotlin 的用户应用项目
在将项目导入您喜欢的 IDE 后,打开 build.gradle 文件,您应该会看到以下内容。请注意,我们正在向其中添加额外的信息,比如引导依赖和测试声明。请参见清单 1-9。
Kotlin 的 build.gradle 列表 1-9
接下来,打开 UsersApplication.kt 文件(请注意新路径:src/main/kotlin)。请参阅清单 1-10。
列表 1-10 源代码:src/main/kotlin/com/apress/users/UsersApplication.kt
列表 1-10 展示了主要应用程序。与列表 1-3 中的 UsersApplication.java 相比,请注意仍然有一个@SpringBootApplication 注解,以及 runApplication 调用,它传递了参数(来自命令行的任何参数)和配置类,这里是 UserApplication 类本身。
接下来,添加 User.kt 文件,内容如列表 1-11 所示。
列表 1-11 源代码:src/main/kotlin/com/apress/users/User.kt
正如你所见,Kotlin 去除了 Java 的所有样板代码(如清单 1-4 所示)。当然,Kotlin 和 Java 各有优缺点,但我们在本书中不打算讨论这些。我建议选择你觉得更易于使用的编程语言,或者在你的组织中广泛使用的语言。
接下来,添加 UsersController.kt 文件,内容与清单 1-12 中所示相同。
列表 1-12 源代码路径: src/main/kotlin/com/apress/users/UsersController.kt
UsersController.kt 类将向外界提供 API。正如你所看到的,它与 Java 版本(见清单 1-5)几乎没有区别。
使用 Kotlin 测试用户应用项目
为了测试用户应用程序项目,请将清单 1-13 中的代码添加到 UserApplicationTest.kt 文件。
列表 1-13 源代码路径: src/test/kotlin/com/apress/users/UsersApplicationTests.kt
UsersApplicationTests.kt 类是 UserApplicationTests.java 的 Kotlin 版本(见列表 1-8)。唯一新增的注解是 @Throws,这对于本测试来说非常直观。
现在,您可以通过右键点击此文件并选择“运行”选项来执行测试,这将产生与图 1-4 中所示类似的结果。命令行也是如此,这一点没有变化。
使用 Kotlin 运行 Users App 项目与使用 Java 的方式相同:可以在 IDE 中运行,也可以使用以下命令运行:
很棒!现在你有了一个使用 Spring Boot 的不同编程语言的用户应用项目。
aardio + PowerShell 可视化快速开发桌面程序,一键生成独立 EXE
aardio 可以方便地调用 PowerShell ,PowerShell 中也可以自由调用 aardio 对象与函数。不用带上体积很大的 System.Management.Automation.dll,直接调用系统组件,可以生成体积很小的独立 EXE。向下兼容到 .NET 2.0、PowerShell 2.0,支持 Win7,Win8,Win10,Win11 ……
aardio 调用 PowerShelll 的功能由基于 dotNet 库 实现的 dotNet.ps 库提供。请参考: 。
我们直接上代码看示例:
dotNet.ps.command 的第一个参数指定要调用的 PowerShell 命令名,第二个参数用一个表对象指定 PowerShell 命令参数 —— 可以包含仅由参数名字组成的数组成员。
参数表也可以包含由名值对指定的命名参数,例如:
要注意参数名前面不需要加 $ 或 – 前缀。等号前面是参数名(必须是字符串),等号后面是参数值(可传入 .NET 对象、COM 对象、aardio 对象)。
使用匿名参数调用 PowerShell 脚本的示例:
匿名参数也可以这样写:
也可以指定命名参数,如下:
这里请注意:
1、PowerShell 通常用 param 声明参数名称(函数里也可以这样写)。
2、PowerShell 要在变量(或参数名)前加上 $ 符号,在 aardio 中指定 PowerShell 参数时要去掉这个 $ 符号。
dotNet.ps() , dotNet.ps.command() 的传参数规则是完全一样的。
下面就要进入最神奇的部分了,在 PowerShell 里还可以方便地调用 aardio 对象。
我们直接看 aardio 代码示例:
Win10 / Win11 自带的 PowerShell 5.1 可以支持这种舒服的写法。如果要兼容 Win7 只要简单地调用 dotNet.ps.export( aardio对象 ) 导出参数给 PowerShell 就可以了,不过 Win7 的市场份额已经很小,这种事太追求完美也不好。
aardio 代码示例:
很简单,我们直接看 aardio 代码示例:
我们也可以指定 dotNet.ps.onWriteProgress 回调以自定义 PowerShell 进度条,一个例子:
这个进度条范例的源码在这里:aardio 自带范例 / 调用其他语言 / PowerShell / 进度条
上面范例里有一些方便的小工具,例如操作系统默认禁止单独运行 *.ps1 脚本文件。上面范例里就提供了一个小工具 —— 可以一键开启或关闭这个权限:
PowerShell 里有很多 Cmdlet 是用 C# 写的,而 C# 写的软件可以用 ILSpy 直接查看源码。其实看看一些 Cmdlet 的源码很有意思,但这个操作步骤有些多。
aardio 自带的 PowerShell 范例里还提供了一个快速查看 Cmdlet 源码的工具,可以直接列出所有命令,可以搜索查询,可以一键调用 ILSpy 反编译出源代码:
用大白话讲就是这三者可以直接共享对象,相互调用对象非常方便。
当使用 dotNet.ps 运行 PowerShell 代码是在当前进程中运行( 没有创建新进程,但创建了新线程),并且 PowerShell 就运行在 aardio 创建的 .NET 应用程序域中 —— 这时候 aardio / PowerShell / .NET 共享一个应用程序域,这让我们可以做一些有趣的事。
请看 aardio 代码示例:
aardio 库 dotNet.json 内存加载了 .NET 程序集 Newtonsoft.Json.dll,然后我们在 .NET 或是 PowerShell 中就可以直接使用这个程序集导入的类。
注意:PowerShell 将类或类型放在 [中括号] 内,PowerShell 在声明或强制转换类型时都使用这个 [中括号] ,访问类的静态成员使用 :: 而不是圆点 。
下面的例子更进一步:在 aardio 中编译 C# 代码,然后在 PowerShell 中调用该 C# 代码引入的类,然后在 C# 中回调 PowerShell 函数,然后在该 PowerShell 函数中回调 aardio 函数:
这里就要注意 PowerShell 有一个非常特别的『 特(大)性(坑)』—— PowerShell 的函数里每句代码的默认输入都会增加一个返回值,例如您执行下面的 PowerShell 代码:
这里的返回值实际上有两个,一个是 $win.msgbox() 返回的 object,另一个是 return 返回的 $a,最终返回值是一个数组。然后就会报返回值与 C# 委托回调的返回值类型不匹配。
避免上面这个问题也很简单,把代码放到一个赋值语句里就不会增加返回值了,正确写法:
我们还可以用 aardio 中的 procee.popen 创建进程管道,这样就可以读写 PowerShell.exe 的输出输入,并且隐藏黑窗口。
下面是一个例子:
这里要注意,PowerShell 会将仅用大括号包含的 PowerShell 作为字符串输出,在前面加上一个 & 字符才会执行该语句块。
aardio 中还可以非常方便地调用 C语言、C++、C#、Java、Python、R、Javascript、Node.Js、Fortran、VB、Flash ActionScript、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 语言、批处理 …… 甚至可以直接嵌入汇编机器码并且转换为普通的 aardio 函数。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。