Reference: dynamic load java codeможет динамически загружать классы, чтобы переподчинить статические ссылки?
public interface Postman {
void deliverMessage(String msg);
}
//loaded by dynamic class loader, with parent class loader pointing to main
public class PostmanImpl implements Postman {
}
public class PostmanApp {
public static void main(String[] args) throws Exception {
Postman postman = getPostman();
while (true) {
//postman.deliverMessage(msg);
getPostman().deliverMessage(msg);
}
}
private static Postman getPostman() {
// Omit for now, will come back later
// ???
}
}
Как получить доступ к уточненному динамическому классу со статической ссылкой? По-видимому, прямая (нормальная) ссылка на объект динамического класса не будет делать трюк.
Я не совсем следую приведенному выше заявлению. а не apparent
мне. Динамический загрузчик классов всегда будет ссылаться на загрузчик классов main
как на загрузчик родительского класса, поэтому всегда работает интерфейс Postman
, загрузчик динамического класса всегда загружает новый класс Impl
, который совместим с interface
.
InvocationHandler handler = new DynaCodeInvocationHandler(...);
Postman proxy = (Postman) Proxy.newProxyInstance(
Postman.class.getClassLoader(),
new Class[] { Postman.class },
handler);
В конечном итоге автор предложил использовать прокси для делегирования вызовов по интерфейсу для недавно загруженной реализации.
По-видимому, прямая (нормальная) ссылка на объект динамического класса не будет делать трюк.
В чем проблема с прямым назначением ссылки на новый класс? почему в итоге нужен Proxy
?
* «В чем здесь проблема?» * Что это за проблема? Это не ясно из вашего вопроса. * «Почему в конце концов нужен« прокси »?» * Это не так. –