Как фреймворк запускает пользовательский код клиента, который реализован на основе его открытого интерфейса? - PullRequest
0 голосов
/ 09 апреля 2019

Интересно, как фреймворки или, например, API JDK выполняют пользовательский код клиента, который реализован на основе интерфейса, который он предоставляет.

Например, javax.security запускает клиент с пользовательским кодом, предоставляемый через реализованные методы интерфейса. Я не могу четко объяснить, как API сможет запускать реализованный класс. Я думаю, что все в порядке, они предоставляют API через интерфейс Java, но для запуска этого пользовательского кода должен быть механизм выполнения или механизм выполнения.

import javax.security.auth.spi.LoginModule;

public class CustomerLoginModule implements LoginModule {
   ...
}

package javax.security.auth.spi;

import javax.security.auth.Subject;
import javax.security.auth.AuthPermission;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
import java.util.Map;

public interface LoginModule {

    void initialize(Subject subject, CallbackHandler callbackHandler,
                    Map<String,?> sharedState,
                    Map<String,?> options);

    boolean login() throws LoginException;

    boolean commit() throws LoginException;

    boolean abort() throws LoginException;

    boolean logout() throws LoginException;
}

Как Java Security API выполняет клиентский код, который не соответствует этому интерфейсу внутри? Как это работает под капотом?

Или, например, опять же, в контексте интерфейса, я не могу четко объяснить, как этот API выполняет пользовательский код клиента.

package java.util;
public interface EventListener {

}

package com.xxx;
import java.util.EventListener;
public interface IPreferenceObserver extends EventListener {
    void onPreferenceChange();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...