Умеете работать весной? Пожалуйста, съешьте мою собачью ногу!

Java Spring

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

Если я так скажу, многие гуру Java вообще не использовали Spring в полной мере. Вы можете быть очень удивлены, потому что Spring имеет такой широкий спектр приложений и так много функций, а три поколения Spring, SpringBoot и SpringCloud много раз избегали упадка Java.

Java может прийти в наши дни, внесла свой вклад Spring. Чтобы сказать, что Весна хороша, нельзя сказать 100 слов похвалы. Хвастаться до крайности - значит ругать, можно только сказать: Весенняя корова Б!

Но почему многие большие коровы редко используют Spring? Это также связано с рабочими характеристиками. Они часто пишут какое-то промежуточное ПО и делают несколько распределенных ссылок.В это время, когда вводится Spring, он сильно раздувается. Они используют Netty больше, чем Spring.

Семейство Spring в основном решает инженерные задачи, однако большинство проектов в мире имеют инженерные задачи, на которых начальнику проще всего заработать, поэтому они поладили.

Spring довольно сложно использовать в большинстве случаев, особенно если вы испытали взрыв конфигурации xml. Поэтому SpringBoot интегрирует набор инструментов быстрой разработки на этой основе. Из коробки запускается одна строчка кода.

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Само собой разумеется, что фреймворк настолько прост в использовании, что это хорошо. Но некоторые из них доведены до отчаяния, и в резюме это написано голым.精通Два светящихся золотых символа прямо ослепили интервьюера. Пытаюсь вбить мастеров в двухмерность — начинают зашкаливать гормоны. Вы должны знать, что текущий размер исходного кода семейства Spring может достигать нескольких гигабайт, Вы действительно сделали все это?

Боюсь не быть богом.

В следующем содержимом нет различий между Spring и SpringBoot, поскольку само различие не имеет смысла.

Вопросы интервью Spring в основном бессмысленны

Для интервьюеров, которые работают более 3 лет, интервьюер искал и не мог найти несколько вопросов, связанных с Spring. Большинство людей, проработавших много лет, не могут ответить на такие оскорбительные вопросы, как IOC и AOP, потому что это просто игра слов. После ворочания вопросов не было, и вдруг вспышка вдохновения: Поговорим о шаблонах проектирования.

Нет-нет, шаблоны проектирования по сути относятся к категории хитрых слов, и их легко перепроектировать, но это все равно намного лучше, чем исходный код Spring.

Не умеете работать с Spring? Не по теме, не по теме.

весенние данные? пружинная безопасность? весенний веб-поток? Это как-то связано с самой весной, это решение. Если ты не впитываешься в индустрию в течение года или двух, о чем ты говоришь? Если вы расскажете об этом, вы обнаружите, что это знание отрасли, и то, задействован ли Spring или нет, имеет к этому большое отношение.

Поэтому, если вы владеете Spring, вы, скорее всего, хорошо разбираетесь в основном использовании, особенно в тех аннотациях, которые будут тошнить и воспроизводить себя, если вы слишком много читаете.

  1. что такое весна?

    У человека, который задал этот вопрос, больной разум, следующий вопрос.

  2. Каковы преимущества использования фреймворка Spring?

    Люди, которые задают подобные вопросы, отнимают у вас драгоценное время жизни, и я предлагаю вам спросить: к какой структуре вы относитесь?

  3. Какие шаблоны проектирования использует Spring?

    Если он хочет услышать о фабриках, шаблонах и синглтонах, просто найдите что-нибудь и дайте ему послушать. 10 секунд на решение.

Вы должны спросить кого-то, кто опытен, и такой вопрос застанет людей врасплох. Я видел того, кто любит копировать《effective java》В нем есть несколько вонючих и длинных теорем, чтобы убить интервьюера. Не думайте, что это божественная книга, она только для того, чтобы спокойно подумать.

Возьмем, к примеру, первое правило «эффективной Java»: почему статические фабричные методы заменяют конструкторы? В книге перечислены 5 причин.

  • может иметь имя
  • Нет необходимости каждый раз создавать новый объект
  • Может возвращать любой подтип определенного типа
  • Может возвращать разные объекты на основе параметров
  • Возвращаемый объект не обязательно должен существовать

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

Например, я спрашиваю вас, почему сердце растет слева, а не справа? Это бессмысленный вопрос.

Итак, каковы наиболее часто встречающиеся темы, связанные со Spring? Это процесс запуска SpringBoot. Каждый, кто глубоко затронут Spring, должен кое-что знать. Это могло быть реализовано последовательным программированием, но я не знал, что гений изобрел аннотацию @Import, когда он потерял рассудок. С тех пор различные spring-boot-starters входили в исходный код, чтобы узнать, что он делает. .

На самом деле, мы можем разделить его на две части.

Процесс загрузки SpringBoot

Во-первых, аннотация SpringBootApplication на самом деле содержит кучу других аннотаций. Важнее,

  • SpringBootConfigurationУказывает, что это класс конфигурации, который будет просканирован и загружен вIoCконтейнер
  • ComponentScanУкажите путь для сканирования, по умолчанию — сканирование из пакета того класса, в котором находится аннотация.
  • EnableAutoConfigurationЭто специфичная для SpringBoot аннотация, используемая для загрузки классов, определенных SPI.

image.png

Кроме последнего, двум другим нечего сказать. Серия Enable на самом деле делает много вещей: она использует аннотацию @Import для динамической регистрации определений bean-компонентов для определенных сценариев. такие как общие@EnableCaching,@EnableDiscoveryClientЖдать.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

Глядя на приведенный выше код, аннотация Import на самом деле делает довольно тяжелую работу. Он импортирует файл с именемAutoConfigurationImportSelectorтип. Отсюда вводятся все действия по инициализации SpringBoot. не толькоEnable*Аннотации, даже аннотации AutoConfigurationPackage, импортируют файл с именемRegistrarтип.

Так что аннотация @Import действительно мощная. Поскольку AutoConfigurationImportSelector реализуетImportSelectorинтерфейс, поэтому он также реализует свойselectImportsметод.META-INF/spring.factoriesВ этом методе реализована загрузка.

Таким образом, слой за слоем, из аннотации EnableAutoConfiguration, в реализацию ImportSelector, а затем передать управление загрузкойMETA-INF/spring.factoriesв указанной автоконфигурации.

Здесь следует подчеркнуть: этот процесс загрузки не обязательно очень хорош. Но поскольку это реализация SpringBoot, а SpringBoot очень популярен, я надеюсь, что вы сможете быстро справиться с ним, когда столкнетесь с проблемами. В совокупности это становится необходимым знанием.

Процесс запуска SpringBoot

Чтобы понять процесс запуска SpringBoot, мы должны сначала рассмотреть различные крючки, которые он нам предоставляет. У нас есть@PostConstructобратите внимание, такжеInitializingBeanинтерфейс иCommandLineRunnerЖдать. Будет еще больше.

Мы должны классифицировать эти реализации, потому что некоторые из них относятся к глобальным, а некоторые — к Бину.

Возьмем в качестве примера глобальный мониторинг SpringBoot.CommandLineRunnerиApplicationRunnerДва интерфейса с похожими функциями, надо сказать, сильно раздуты.

image.png

Конкретный процесс определенно вонючий и длинный, но как с ним справляются эти функции-ловушки? На самом деле он распространяется через события. Будь то глобальный или bean-компонент, список хуков будет кэшироваться, и этот интерфейс будет вызываться при выполнении соответствующего процесса. Большинство хуков, поскольку они представляют собой список, будут упорядочены по порядку, а порядок выполнения можно указать, добавив аннотацию @Order.

Меня никогда не интересовала волокита здесь, потому что там размещается механизм, а сколько событий выставлено и насколько это детализировано, зависит от настроения дизайнера фреймворка. Принимать за истину не надо, если поменять фреймворк, то детализация и название будут другие, но принципы те же.

End

Жаль, что Spring и SpringBoot решили максимально раскрыть эти внутренние интерфейсы и добавили к своим функциям множество семантических API, например, оригинальный Bean расширен до @Service, @Component, @Repository и т.д. аннотация столбца. Следствие - что использовать, пользоваться просто, но сложно, различные пакеты и прыжки, даже отладочная информация неизвестна, пока вы выставляете интерфейс, всегда будут люди, которые не играют в карты по правилам. правила, поэтому при его использовании, как правило, спецификации используются для ограничения.

Это не правда, это всего лишь одна из многих возможностей, которые выбрал Spring. Например, отступ Python и yml, автоматический формат go — это не правда, а выбор, не путайте. Вы можете попросить кого-то сделать это, но вы не можете сказать, что это абсолютно правильно.

Для компании такая гибкость нежелательна. Например, вы предоставляетеCommandLineRunnerинтерфейс, не беспокойтесь об этом большеApplicationRunner, что увеличит умственную нагрузку программиста. Одинspring-data-jpa, Есть только пять или шесть видов методов запроса, вы не чувствуете боли?

Что еще хуже, некоторые люди гордятся этим, в чем нет необходимости. Как всем известно, ваша и моя работа заключается в том, чтобы просто выбраться из одной горы дерьма, а затем разобрать другую гору дерьма. Но вот вопрос, что нужно делать с таким количеством лопат?

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.