Spring 将值传递到函数中而不直接作为参数传递的好方法

Spring 将值传递到函数中而不直接作为参数传递的好方法,spring,spring-boot,kotlin,Spring,Spring Boot,Kotlin,我有一个由Spring管理的kotlin类(它是一个@Service)。它在非Spring管理的对象上调用函数。如何将值传递给该函数 我不想只传递参数给它,因为这个函数是多态的,我只希望这个函数的一个版本使用这个值,这个函数的其他版本不需要这个值 我使用@value注释从属性文件中获取此值 代码示例: @Service class ServiceClass( private val transactionTemplate: TransactionTemplate, @Value(

我有一个由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()
            }
        }
    }
}
我只希望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
    }
}