当使用 Kotlin BeanDefinitionDsl 将 bean 添加到上下文时,似乎不会调用 @PostConstruct 方法。
这在我自己的项目中发生在我身上,但为了创建一种简单的方法来重现它,这就是我所做的。
因此,您所需要做的就是分叉我的存储库并执行 gradle 运行。
我的问题是:
如果您不想拉取我的存储库,请参阅以下有关我所做操作的更多详细信息。我将其添加到 UserHandler 类中:
@PostConstruct
fun afterPropertiesSet() {
System.out.println("AFTER PROPERTIES SET CALLED")
}
Run Code Online (Sandbox Code Playgroud)
以及导入和 Gradle 依赖项。
通过调用 beans DSL 中的 bean 方法将 UserHandler bean 拉入上下文,如下所示:
fun beans() = beans {
bean<UserHandler>()
// ...
}
Run Code Online (Sandbox Code Playgroud)
这被带入上下文:
beans().initialize(context)
Run Code Online (Sandbox Code Playgroud) Python 有一个切片运算符,我想在 Kotlin 中使用它。
我想要 Kotlin 中的以下代码
val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
println(
list[5]
)
println(
list[2, 5].joinToString()
)
println(
list[2, 10, 2].joinToString()
)
val mutableList = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
mutableList[2, 10, 2] = listOf(1, 2, 3, 4)
println(
mutableList.joinToString()
)
Run Code Online (Sandbox Code Playgroud)
输出以下内容:
6
3, 4, 5
3, 5, 7, 9
1, 2, 1, 4, 2, 6, 3, 8, 4, 10
Run Code Online (Sandbox Code Playgroud)
但这不起作用!
我正在尝试将kotlin-main-kts与 Ktor 客户端一起使用。
这是我的简单 Kotlin 脚本,位于名为 的文件中ktor_tests.main.kts:
@file:Repository("https://repo1.maven.org/maven2")
@file:DependsOn("io.ktor:ktor-client-core-jvm:1.5.3")
@file:DependsOn("io.ktor:ktor-client-cio:1.5.3")
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
println("Hello")
HttpClient(CIO).use {
println("In client scope.")
}
Run Code Online (Sandbox Code Playgroud)
我运行它
kotlinc -cp ~/.m2/repository/org/jetbrains/kotlin/kotlin-main-kts/1.4.21/kotlin-main-kts-1.4.21.jar -script ktor_tests.main.kts
Run Code Online (Sandbox Code Playgroud)
输出是
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.intellij.util.ReflectionUtil …Run Code Online (Sandbox Code Playgroud)