• Для чего нужен метод main?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    В операционной системе есть часть системного кода целью которой является "Запуск программы на выполнение". Когда Вы "жахаете" дважды по exe-файлу эта часть создает процесс, создает первичный поток, проецирует куски данных из вашего exe-файла на регионы памяти в процесс и др. не менее важные процессы.

    Когда сис.загрузчик хочет найти и передать управление первичному потоку, он должен ответить на вопрос "А где искать машинный код для первичного потока?". Он, сис.загручик, знает как устроен формат exe-файла и отыскивает значение указателя где расположен код, откуда следует начать работу программы записанной в exe-файле. Для exe-файлов смотри хидер winnt.h в IMAGE_OPTIONAL_HEADER поле AddressOfEntryPoint.

    В каждом, современном исполняемом файле, как правило, две точки входа. Одна из них является ничем иным "стартовым кодом", иногда именуемая runtime-code или "стабом". Эта часть генерируется компилятором и достаточно часто повторяется для всех файлов генерируемых компилятором. А другая часть "пользовательская", вот это пользовательская и есть Ваша main(). Но ее наименование можно по-другому настроить(см. документацию к Вашему компилятору).

    Что рантайм-код, что Ваша main() это ни что иное как функции обратного вызова. Их вызывает сам сис.загрузчик. После того как рантайм-код записан в файл, указатель на него записывается в AddressOfEntryPoint(см.выше), в процессе работы в недрах сгенерированного рантайм-кода есть переход на вашу main().
    Ответ написан
    Комментировать
  • Не могу разобраться с фасадом. Что я упускаю?

    1. Оно же даже не компилируется. У вас в AbstractFacade конструктор с одним аргументом, а в UsermyFacade - конструктор по умолчанию.
    2. Всё ломается из-за того, что вы строите UsermyController вручную, вызовом new UsermyController(). Естественно, что никакие зависимости в него не внедряются. UsermyController должен быть сконструирован контейнером. Он может быть получен сервлетом как поле с аннотацией @Inject, например.
    Ответ написан
    1 комментарий