Вызов хранилища из строки в среде Java Spring - PullRequest
0 голосов
/ 14 января 2019

Есть ли способ вызвать интерфейс из строки?

String repName = "package." + modelName + "Repository";

Class<?> repo = Class.forName(repName);
Object obj = repo.getDeclaredConstructor().newInstance();

Method setNameMethod = obj.getClass().getMethod("findById", int.class);
setNameMethod.invoke(obj, 7); // passing 7

Это должно работать для обычных методов / классов, но как я могу динамически вызывать интерфейс?

1 Ответ

0 голосов
/ 14 января 2019

Если вы действуете в контексте весны, вы можете использовать ApplicationContext -bean:

@Component
class Test {
    private final ApplicationContext context;

    @Autowired
    public Test(ApplicationContext context) {
        this.context = context;
    }

    public void callRepository(String repName) /* here should come some throws declarations */ {
        Class<?> type = Class.forName(repName);
        Object instance = context.getBean(repName);

        type.getMethod("findById", int.class).invoke(instance, 7);
    }
}

ApplicationContext позволяет получить доступ к каждому зарегистрированному компоненту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...