spring - 将值传递给函数而不直接作为参数传递的好方法
问题描述
我有 Spring 管理的 kotlin 类(它是一个@Service)。它调用非 Spring 管理的对象上的函数。如何将值传递给该函数?
我不想只传递参数给它,因为这个函数是多态的,我只希望这个函数的一个版本使用这个值,这个函数的其他版本不需要这个值。
我通过使用 @Value 注释从属性文件中获取此值。
代码示例:
@Service
class ServiceClass(
private val transactionTemplate: TransactionTemplate,
@Value("\${some-value}")
private val someValue: String
) {
private fun callingPolymorphicFunction(polymorphicObjects: List<PolymorphicObjects>) {
transactionTemplate.execute {
polymorphicObjects.forEach {
it.process()
}
}
}
}
sealed class PolymorphicObjects {
abstract fun process(): AnotherObject?
}
data class PolyMorphicObjectsInheriting1(
//some fields
) : PolymorphicObjects() {
override fun process(): AnotherObject? {
//some code #1
}
}
data class PolyMorphicObjectsInheriting2(
//some other fields
) : PolymorphicObjects() {
override fun process(): AnotherObject? {
//some code #2
}
}
data class PolyMorphicObjectsInheriting3(
//some other fields yet again
) : PolymorphicObjects() {
override fun process(): AnotherObject? {
//some code #3
}
}
我只希望 PolyMorphicObjectsInheriting1::process 能够访问这个值而不是其他值,最简单的方法是什么?
tldr:如何在不添加其他参数的情况下将值传递给函数?
解决方案
听起来像是设计问题,但您可以在 ServiceClass 中创建公共静态变量并在 @PostConstruct 注释方法中将其设置为等于 someValue 并在 prcoess(..) 方法中调用
推荐阅读
- node.js - 获取 URL 正文时,我收到一个禁止请求错误。如何解决这个问题?
- mysql - 操作数应包含 1 列或 sql 语法错误
- java - 工厂设计模式验证理解
- java - “KeyInput”代码不起作用。游戏角色不会移动
- c++ - 为什么像 *B[0] 这样的语句没有给出二维数组 B[2][3] 中第一个一维数组的地址?
- reactjs - 将 geojson 导入到 react-leaflet-draw
- python - 在滚动视图中将 minimum_height 绑定到 boxlayout 时出现键错误
- php - .htaccess 删除带有多个参数的漂亮 url 的 php 扩展
- c# - 有没有办法改变组合框的“DropDown”字体
- ios - Xcode 10 - 无法构建 React Native 应用程序