Я считаю, что каждый читатель знает, как использовать Spring на работе и в обучении.Для младшего разработчика, просто зная, как его использовать, можно быстро выполнять задачи через Spring.Этого должно быть достаточно, но если Вы также хотите перейти на более высокий уровень , и систематическое изучение и освоение его основных принципов имеют важное значение.
Когда все проходят собеседование, Spring должен быть неизбежным уровнем, и его нетрудно использовать умело.Знание его основных принципов — это то, что нужно, чтобы быть на шаг впереди других. В этой статье мы кратко расскажем о некоторых знаниях о Spring, надеясь помочь вам на пути к собеседованию.
Spring — это среда с открытым исходным кодом, созданная для решения сложностей разработки корпоративных приложений. Spring не ограничивается только разработкой на стороне сервера. С помощью Spring любое Java-приложение можно сделать более простым, более тестируемым и лучше слабо связанным.
Чтобы упростить разработку Java, Spring использует четыре ключевые стратегии:
-
Легкое и минимально инвазивное программирование на основе POJO;
-
Слабая связь через внедрение зависимостей и ориентацию интерфейса;
-
Декларативное программирование на основе аспектов и соглашений;
-
Сократите шаблонный код с помощью аспектов и шаблонов.
几乎Spring所做的任何事情,都是围绕着以上四种策略来实现的,其核心就是:简化java开发。
1. Легкий POJO
В ежедневном процессе разработки большинству людей может показаться, что многие фреймворки заставят приложения наследовать их классы или реализовывать их интерфейсы, что приведет к привязке программ и фреймворков. модуль, в том числе DAO, Service, будут принудительно наследовать классы в фреймворке, а приложение и фреймворк тесно связаны. Spring изо всех сил старается не испортить код вашего приложения из-за своего собственного API, и Spring не заставит вас реализовывать свой интерфейс или наследовать его классы.Самое серьезное, что гром будет использовать аннотации Spring. Ненавязчивое программирование Spring означает, что этот класс играет ту же роль в приложениях Spring, что и в приложениях, отличных от Spring.
2. Внедрение зависимостей
Любое практическое приложение обязательно будет состоять из нескольких классов.В отсутствие Spring каждый объект отвечает за управление ссылками на объекты, взаимодействующие с самим собой, что приведет к сильно связанному и трудно тестируемому коду.
public class Train implements Transport{
private Water water;
public Train() {
water = new Water();
}
public void catchGoods(){
water.waterSomthing();
}
}
Как вы можете видеть в приведенном выше коде, Train создает объект Water в своем собственном конструкторе, что приводит к тесной связи этих двух объектов.Этот поезд может перевозить воду для орошения сельскохозяйственных угодий, но если поезд используется для перевозки угля для отопления , может не совпадать.
Во время юнит-тестирования нам нужно убедиться, что waterSomthing также может выполняться при выполнении метода catchGoods, иначе юнит-тест не может быть выполнен.
Связывание имеет две стороны. С одной стороны, тесно связанный код трудно тестировать, воспринимать и понимать. Одна модификация может вызвать другие ошибки. Делайте только одно: не используйте один интерфейс для предоставления услуг в нескольких местах одновременно время), с другой стороны, полностью несвязанный код ничего не может сделать.
В Spring зависимости объектов дополняются сторонними компонентами, ответственными за координацию каждого объекта. Объекты не нужно создавать сами по себе. Внедрение зависимостей автоматически дает зависимое отношение к целевому объекту вместо того, чтобы позволить объекту получить его путем сам.
public class Train implements Transport{
private Water water;
public Train(Water water) {
this.water = water;
}
public void catchGoods(){
water.waterSomthing();
}
}
После внесенных выше изменений Train больше не создается сам по себе, а передается как параметр конструктора, что также является способом внедрения зависимостей: внедрение конструктора. Это также обеспечивает слабую связь.
Процесс создания взаимодействия между компонентами приложения часто называют сборкой.В Spring есть множество способов сборки bean-компонентов, наиболее распространенным из которых является XML.
<?xml version="1.0" encoding="UTF-8"?>
<!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="train" class="com.kr.caption.spring.Train">
<constructor-arg ref="water"/>
</bean>
<bean id="water" class="com.kr.caption.spring.Water"/>
</beans>
В приведенном выше XML-файле два объекта объявлены как bean-компоненты в Spring.В Train ссылка на Water передается во время построения в качестве параметра конструктора.
@Configuration
public class TrainConfig {
@Bean
public Transport train(){
return new Train(water());
}
@Bean
public Water water(){
return new Water();
}
}
Выше приведена конфигурация на основе Java, обе из которых имеют одинаковый эффект.
Spring загружает определения bean-компонентов и собирает их через контекст приложения. Контекст приложения Spring полностью отвечает за создание и сборку объектов. Spring имеет несколько реализаций контекста. Основное различие между ними заключается в том, как загружать конфигурацию.
public class application {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:application_example.xml");
Train bean = context.getBean(Train.class);
bean.catchGoods();
}
}
Основной метод здесь создает контекст приложения Spring на основе application_example.xml, а затем вы можете получить экземпляр объекта и вызвать метод напрямую.
3. Аспектно-ориентированное программирование
Система состоит из разных компонентов, и эти компоненты не только выполняют свои основные функции, но и берут на себя некоторые другие обязанности. Такие вещи, как ведение журнала, управление транзакциями и безопасность, обычно выполняются через различные компоненты проекта. Если вы не занимаетесь этой частью систематически, ваш код будет содержать много дублирования. Если вы абстрагируете их в один модуль, другие модули будут просто вызывать его методы, а вызовы методов все равно будут появляться в каждом модуле.
АОП разделит эти службы на модули и применит их к модулям, на которые они должны воздействовать, декларативным образом, так что другие модули будут сосредоточены только на своем собственном бизнесе, и им вообще не нужно будет понимать соответствующую логику и код этих служб.
Глядя на приведенную выше картинку, мы можем думать об аспекте как о оболочке, покрывающей множество компонентов. С помощью АОП эти функциональные уровни можно обернуть вокруг основного бизнес-уровня.Эти функциональные уровни гибко применяются к системе декларативным образом. Другие бизнес-приложения просто не знают о его существовании.
напиши в конце
Здесь не так много риторики. Если эта статья была вам полезна, я надеюсь, что вы можете щелкнуть QR-код ниже, чтобы подписаться на волну, или поделиться ею в кругу друзей.
Я буду продолжать делиться в том же духе.Ваше внимание, переадресация и красивый внешний вид - самая большая поддержка для меня, спасибо.