Как мы загружаем классы при запуске JVM (сразу)? - PullRequest
1 голос
/ 10 февраля 2012

Добрый день всем,

Мне было интересно, есть ли способ заставить статический блок класса работать, даже если на сам класс нет ссылок?

Я знаю, что он загружается так, что простой вызов любой из функций этого класса начнет инициацию класса,

Однако я хочу, чтобы класс инициировался перед любыми вызовами, другими словами, я хочу, чтобы он запускался при запуске JVM независимо от того, на него ссылаются или нет.

Предварительная загрузка java-классов / библиотек при запуске jar предложил обходной путь, но это не совсем то решение, которое я ищу (в основном я не хочу делать Class.forName, я хочу это должно быть сделано при запуске JVM)

Как мы будем это делать?

1 Ответ

2 голосов
/ 10 февраля 2012

Если есть способ сделать это, он, вероятно, будет включать использование опций JVM, которые не совсем элегантны или полностью переносимы.

Использование класса-оболочки вокруг существующего приложения может быть более чистой альтернативой, если все, что вам нужно, это инициализировать некоторый класс до того, как ваш код приложения будет выполнен:

public class LoggedLauncher {
    public static void main(String[] args) {
        // Do whatever you need to initialize your logging class
        //
        // e.g. call a static method:
        //
        // MyLogger.init();

        // ...then start your application
        MyApplication.main(args);
    }
}

Вы можете даже использовать немного отражения, чтобы класс приложения мог быть предоставлен в качестве аргумента дляобертка, заменяющая жестко заданную ссылку.Если вы это сделаете, не забудьте манипулировать массивом args, чтобы соответствующие аргументы были переданы методу main() вашего приложения.

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