Как Spring JPA «создает экземпляры» интерфейсов, расширяющих репозитории?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как Spring JPA «создает экземпляры» интерфейсов, расширяющих репозитории?

Сообщение Anonymous »

Я углубляюсь в такие концепции Java, как динамические прокси, отражение и т. д. Вот почему я пытаюсь реализовать некоторые функции Spring. В любом случае...
Я создал динамический прокси:

Код: Выделить всё

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.isAnnotationPresent(Query.class)) {
System.out.println("It's a query!");
} else {
System.out.println("Not a query!");
}

Object result = method.invoke(repository, args);
System.out.println("After " + method.getName() + " is called");
return result;
}
И расширил мой ApplicationContext:

Код: Выделить всё

if (CrudRepository.class.isAssignableFrom(node.type)) {
Class[] interfaces = node.type.getInterfaces().length > 0
? node.type.getInterfaces()
: new Class[]{ node.type };

InvocationHandler handler = new CrudInvocationHandler((CrudRepository) bean);
bean = Proxy.newProxyInstance(
node.type.getClassLoader(),
interfaces,
handler
);
}
Затем я понял, что в моем классе конфигурации мне нужно вернуть существующий класс:

Код: Выделить всё

@Bean
public UserRepository userRepository() {
return new UserRepository();
}
Итак, на этом этапе я застрял. Как Spring JPA справляется с этими вещами?
Как он может вернуть экземпляр прокси для интерфейса репозитория (например, UserRepository), даже если реального класса реализации нет?

Подробнее здесь: https://stackoverflow.com/questions/797 ... positories
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»