Оригинал: 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, вы, скорее всего, хорошо разбираетесь в основном использовании, особенно в тех аннотациях, которые будут тошнить и воспроизводить себя, если вы слишком много читаете.
-
что такое весна?
У человека, который задал этот вопрос, больной разум, следующий вопрос.
-
Каковы преимущества использования фреймворка Spring?
Люди, которые задают подобные вопросы, отнимают у вас драгоценное время жизни, и я предлагаю вам спросить: к какой структуре вы относитесь?
-
Какие шаблоны проектирования использует Spring?
Если он хочет услышать о фабриках, шаблонах и синглтонах, просто найдите что-нибудь и дайте ему послушать. 10 секунд на решение.
Вы должны спросить кого-то, кто опытен, и такой вопрос застанет людей врасплох. Я видел того, кто любит копировать《effective java》
В нем есть несколько вонючих и длинных теорем, чтобы убить интервьюера. Не думайте, что это божественная книга, она только для того, чтобы спокойно подумать.
Возьмем, к примеру, первое правило «эффективной Java»: почему статические фабричные методы заменяют конструкторы? В книге перечислены 5 причин.
- может иметь имя
- Нет необходимости каждый раз создавать новый объект
- Может возвращать любой подтип определенного типа
- Может возвращать разные объекты на основе параметров
- Возвращаемый объект не обязательно должен существовать
Почувствуйте это внимательно. Вряд ли вокруг вас найдется кто-то, кто сможет ответить исчерпывающе, но это никак не повлияет на их написание кода или даже основных библиотек. Так что эта вонючая и длинная чепуха на самом деле является общепринятым знанием в вашем сердце.
Например, я спрашиваю вас, почему сердце растет слева, а не справа? Это бессмысленный вопрос.
Итак, каковы наиболее часто встречающиеся темы, связанные со Spring? Это процесс запуска SpringBoot. Каждый, кто глубоко затронут Spring, должен кое-что знать. Это могло быть реализовано последовательным программированием, но я не знал, что гений изобрел аннотацию @Import, когда он потерял рассудок. С тех пор различные spring-boot-starters входили в исходный код, чтобы узнать, что он делает. .
На самом деле, мы можем разделить его на две части.
Процесс загрузки SpringBoot
Во-первых, аннотация SpringBootApplication на самом деле содержит кучу других аннотаций. Важнее,
-
SpringBootConfiguration
Указывает, что это класс конфигурации, который будет просканирован и загружен вIoC
контейнер -
ComponentScan
Укажите путь для сканирования, по умолчанию — сканирование из пакета того класса, в котором находится аннотация. -
EnableAutoConfiguration
Это специфичная для SpringBoot аннотация, используемая для загрузки классов, определенных SPI.
Кроме последнего, двум другим нечего сказать. Серия 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
Два интерфейса с похожими функциями, надо сказать, сильно раздуты.
Конкретный процесс определенно вонючий и длинный, но как с ним справляются эти функции-ловушки? На самом деле он распространяется через события. Будь то глобальный или bean-компонент, список хуков будет кэшироваться, и этот интерфейс будет вызываться при выполнении соответствующего процесса. Большинство хуков, поскольку они представляют собой список, будут упорядочены по порядку, а порядок выполнения можно указать, добавив аннотацию @Order.
Меня никогда не интересовала волокита здесь, потому что там размещается механизм, а сколько событий выставлено и насколько это детализировано, зависит от настроения дизайнера фреймворка. Принимать за истину не надо, если поменять фреймворк, то детализация и название будут другие, но принципы те же.
End
Жаль, что Spring и SpringBoot решили максимально раскрыть эти внутренние интерфейсы и добавили к своим функциям множество семантических API, например, оригинальный Bean расширен до @Service, @Component, @Repository и т.д. аннотация столбца. Следствие - что использовать, пользоваться просто, но сложно, различные пакеты и прыжки, даже отладочная информация неизвестна, пока вы выставляете интерфейс, всегда будут люди, которые не играют в карты по правилам. правила, поэтому при его использовании, как правило, спецификации используются для ограничения.
Это не правда, это всего лишь одна из многих возможностей, которые выбрал Spring. Например, отступ Python и yml, автоматический формат go — это не правда, а выбор, не путайте. Вы можете попросить кого-то сделать это, но вы не можете сказать, что это абсолютно правильно.
Для компании такая гибкость нежелательна. Например, вы предоставляетеCommandLineRunner
интерфейс, не беспокойтесь об этом большеApplicationRunner
, что увеличит умственную нагрузку программиста. Одинspring-data-jpa
, Есть только пять или шесть видов методов запроса, вы не чувствуете боли?
Что еще хуже, некоторые люди гордятся этим, в чем нет необходимости. Как всем известно, ваша и моя работа заключается в том, чтобы просто выбраться из одной горы дерьма, а затем разобрать другую гору дерьма. Но вот вопрос, что нужно делать с таким количеством лопат?
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.