Динамически вводить класс весной - PullRequest
1 голос
/ 20 октября 2019

Я хочу внедрить класс динамически на основе аргумента моего вызова метода

Я пытаюсь использовать AspectJ и различные аннотации Spring

Мне нужно решение, подобное этому:

@Component
class MyUseCase(private val spi: MySpiPort) {

    fun myAction() {
        spi.doSomething("myId")
    }
}

interface Injectable

interface MySpiPort : Injectable {
    fun doSomething(id: String)
}


class MyProxyClass {

    //will intercept all Injectable
    fun resolver(id: String): MySpiPort {
        if(id == "myId"){
            //inject MyFirstImpl
        }else{
            //inject MySecondImpl
        }
        TODO("not implemented")
    }

}

@Component
class MyFirstImpl : MySpiPort {
    override fun doSomething(id: String) {
        TODO("not implemented") 
    }
}

@Component
class MySecondImpl : MySpiPort {
    override fun doSomething(id: String) {
        TODO("not implemented")
    }
}

Я ожидаю, что инъекция - это просто общий интерфейс реализаций, я не хочу вводить в классе MyUseCase класс FactoryBean или что-то в этом роде.

1 Ответ

2 голосов
/ 20 октября 2019

Вы можете использовать условный впрыск Spring. Пожалуйста, обратитесь https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-java-conditional

...