Spring 将值传递到函数中而不直接作为参数传递的好方法
我有一个由Spring管理的kotlin类(它是一个@Service)。它在非Spring管理的对象上调用函数。如何将值传递给该函数 我不想只传递参数给它,因为这个函数是多态的,我只希望这个函数的一个版本使用这个值,这个函数的其他版本不需要这个值 我使用@value注释从属性文件中获取此值 代码示例:Spring 将值传递到函数中而不直接作为参数传递的好方法,spring,spring-boot,kotlin,Spring,Spring Boot,Kotlin,我有一个由Spring管理的kotlin类(它是一个@Service)。它在非Spring管理的对象上调用函数。如何将值传递给该函数 我不想只传递参数给它,因为这个函数是多态的,我只希望这个函数的一个版本使用这个值,这个函数的其他版本不需要这个值 我使用@value注释从属性文件中获取此值 代码示例: @Service class ServiceClass( private val transactionTemplate: TransactionTemplate, @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()
}
}
}
}
我只希望PolyMorphicObjectsInheriting1::process能够访问此值而不是其他值,最简单的方法是什么
tldr:如何在不向函数中添加其他参数的情况下将值传递给函数?听起来像是设计问题,但您可以在ServiceClass中创建公共静态变量,并在@PostConstruct annotated method中将其设置为等于某个值,并在prcoess(..)方法中调用它这里可能存在设计问题,但是,如果没有真实的用例,很难在假设的情况下提供帮助。对于任何
多态对象的process()
,您的值似乎通常不被认为“可能”有用,这可能就是您不想将其作为process()
的参数的原因。在这种情况下,我相信多态对象本身应该知道该值,一种方法是在创建时将其提供给对象。谁创建了这些实例?我认为最好重新设计系统的这一部分,但由于时间限制,我还不能这样做。多态对象列表是由系统的其他部分创建的,修改它们也很困难,因为只有一个多态对象需要它。如果我可以访问非Spring对象中的Spring内容(如@Value annotation),而不需要额外的麻烦,那将是最好的,但我认为这是不可能的。您也可以尝试@Configuration
&@ConfigurationProperties
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
}
}