Как вы отвечаете на вопрос интервью, почему вы используете Spring?

Spring

Я считаю, что каждый читатель знает, как использовать 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-код ниже, чтобы подписаться на волну, или поделиться ею в кругу друзей.

Я буду продолжать делиться в том же духе.Ваше внимание, переадресация и красивый внешний вид - самая большая поддержка для меня, спасибо.