首页 > 解决方案 > 关于“动态注入”的Spring Boot依赖注入的困惑

问题描述

有两个 Bean MyProperities 和 MyTask:

@Component
class MyTask(@Qualifier("p1") val b: MyProperties)

class MyProperties

@Configuration
open class MyPropertiesConfig {

    @Bean("p1")
    open fun get1() = MyProperties()

    @Bean("p2")
    open fun get2() = MyProperties()
}

MyProperties 是 application.properties(或其他属性文件)持有者类的属性。MyProperties 的数量为n,MyTask 会根据 MyProperties 的内容做不同的任务。是否有任何优雅的方式可以动态注入 bean MyProperties(具有不同的内容),以便 MyTask 可以根据 MyProperties 执行某些操作?

我有一个方法,但它是如此丑陋......

@Configuration
open class MyTaskConfig {

    @Bean("t1")
    open fun getT1(@Qualifier("p1") @Autowired p: MyProperties) = MyTask(p)

    @Bean("t2")
    open fun getT2(@Qualifier("p2") @Autowired p: MyProperties) = MyTask(p)
}

class MyTask(val p: MyProperties)

@Configuration
open class MyPropertiesConfig {

    @Bean("p1")
    open fun get1() = MyProperties()

    @Bean("p2")
    open fun get2() = MyProperties()
}

class MyProperties

@Component
class TestClass {

    @Qualifier("t1")
    @Autowired
    lateinit var task1: MyTask

    @Qualifier("a2")
    @Autowired
    lateinit var task2: MyTask
}

感谢您的观看和解答!

标签: springspring-bootkotlin

解决方案


推荐阅读