Посмотрите эту шпаргалку по весеннему интервью!

Spring
Посмотрите эту шпаргалку по весеннему интервью!

1. Особенности пружины

Весна имеет следующие основные особенности:

  1. легкий: Spring является ненавязчивым, в котором объекты не зависят от конкретных классов Spring;
  2. Инверсия управления (IoC): через IoC продвигается низкая связанность, и другие объекты, от которых зависит объект, передаются пассивно без активного создания или поиска объекта;
  3. Аспектно-ориентированный (АОП): поддерживает аспектно-ориентированное программирование и отделяет уровень бизнес-логики приложения от уровня системных служб;
  4. контейнер: содержит и управляет конфигурацией и жизненным циклом объектов приложения.В настоящее время Spring эквивалентен контейнеру;
  5. коллекция кадров: Простые компоненты можно настраивать и объединять в более сложные приложения; в Spring объекты приложений декларативно объединяются в XML-файле; кроме того, Spring также предоставляет базовые функции, такие как управление транзакциями и интеграция среды хранения, оставляя разработку логики приложения на усмотрение пользователя. разработчик;

2. Компоненты пружинного сердечника

图片源自网络

Spring представляет собой многоуровневую архитектуру, в основном состоящую из следующих семи модулей. Модули Spring находятся в основном контейнере и определяют, как создаются, настраиваются и управляются bean-компоненты.

  1. Spring Core: Предоставляет основные функции среды Spring.Основным компонентом является BeanFactory, который является реализацией фабричного шаблона.Спецификации конфигурации и зависимостей приложения отделены от фактического кода приложения с помощью механизма IOC.
  2. Spring Context: файл конфигурации, который предоставляет контекстную информацию для Spring Framework, включая корпоративные службы, такие как JNDI, EJB, электронная почта, интернационализация, проверка и планирование.
  3. Spring AOP: Благодаря функциям управления конфигурацией Spring AOP напрямую интегрирует функциональные возможности AOP (аспектно-ориентированные) в среду Spring. Таким образом, мы можем легко использовать среду Spring для управления любым объектом, поддерживающим АОП. Модули предоставляют службы управления транзакциями для объектов в приложениях на основе Spring. С помощью этого компонента Jiujiang Declarative Transaction Management можно интегрировать в приложение, не полагаясь на другие компоненты.
  4. Spring DAO: Уровень абстракции JDBC DAO обеспечивает осмысленную иерархию исключений, которую можно использовать для управления обработкой исключений и сообщениями об ошибках, создаваемыми различными поставщиками баз данных. Иерархия исключений упрощает обработку ошибок и значительно сокращает объем кода исключений, который необходимо написать. Исключения Spring DAO, ориентированные на JDBC, следуют общей иерархии исключений DAO.
  5. Spring ORM: несколько фреймворков ORM вставлены в фреймворк Spring для предоставления объектно-реляционных инструментов ORM, включая JDO, Hibernate и iBatis SQL Map, которые следуют общей иерархии транзакций и исключений DAO Spring;
  6. Spring Web: модуль веб-контекста построен поверх модуля контекста приложения для обеспечения контекста для веб-приложений, поэтому платформа Spring поддерживает интеграцию с Jakarta Structs. Модуль также упрощает обработку составных запросов и привязку параметров запроса к объектам домена.
  7. Spring MVC: MVC — это полнофункциональная реализация MVC для создания веб-приложений, которую можно гибко настраивать для среды MVC через интерфейс стратегии. И MVC также поддерживает такие технологии просмотра, как JSP, Velocity, Tiles и т. д.

3. Весенние общие аннотации

аннотация иллюстрировать
@Controller 1. Используется для маркировки компонентов управляющего слоя.
2. Используется для обозначения класса, чтобы указать, что он является объектом контроллера SpringMVC.
3. Процессор распространения просканирует метод класса, использующий аннотацию, и определит, использует ли метод@RequestMapping
4. уметьRequestпроситьheaderЗначение части привязано к параметру метода
@RestController эквивалентно@Componentа также@ResponseBodyКомбинация
@Component Относится к компоненту в целом, если компонент плохо классифицирован, он аннотируется
@Repository для аннотацииDAOслой, вDaoImplАннотация в классе
@Service Используется для аннотирования компонентов бизнес-уровня.
@ResponseBody 1. Асинхронный запрос
2. Используется для преобразованияControllerМетод возвращает объект, которому переданы соответствующиеHttpMessageConverterПосле преобразования в указанный формат записать вResponseобъектbodyобласть данных
3. Возвращаемые данные неhtmlстраница, но какой-то другой формат данных (json, xml)
@RequestMapping Аннотация, используемая для обработки отображения адреса запроса, используемого для класса или метода, при использовании в классе означает, что все методы в классе, которые отвечают на запросы, используют этот адрес в качестве родительского пути.
@Autowired Аннотируйте переменные-члены класса, методы и конструкторы для завершения автоматической сборки.@Autowiredиспользовать для устраненияget、setметод
@PathVariable Используется для сопоставления переменных шаблона в URL-адресе запроса с параметрами метода обработки функции, то есть взять переменные в шаблоне URL-адреса в качестве параметров
@RequestParam Используется для получения параметров в слое управления фоном Spring MVC, подобноrequest.getParameter("name")
@RequestHeader будетRequestпроситьheaderЗначение части привязано к параметру метода
@ModelAttribute вControllerЭта аннотация выполняется до вызова всех методов, которые можно использовать в аннотациях и параметрах метода.
@SessionAttributes поместите значение вsessionохват, удалитьClassнад
@Valid Проверка данных объекта, используемая с Hibernate Validator
@CookieValue Получатьcookieстоимость в

4. Принцип ИО

4.1 Определения

Spring описывается конфигурационным файломBeanВзаимозависимости между использованием возможностей отражения Java для создания экземпляровBeanи построитьBeanзависимости между. Контейнер IoC Spring на основе выполнения этой низкоуровневой работы также предоставляетBeanКэширование экземпляров, управление жизненным циклом,BeanРасширенные услуги, такие как прокси экземпляра, публикация событий и загрузка ресурсов;

В итоге:IOC отвечает за создание объектов, управление объектами (через внедрение зависимостей), интеграцию объектов, настройку объектов и управление жизненным циклом объектов.;

4.2 Общий вид контейнера Spring

  1. Прочитайте первым, когда начнется веснаBeanинформацию о конфигурации и создать соответствующую копию в контейнере Spring.Beanнастроить реестр;
  2. Согласно сгенерированному на предыдущем шагеBeanНастройте реестр для создания экземпляраBean, и собралBeanзависимости между;
  3. будет создан экземплярBeanзагружается в контейнер SpringBeanВ пуле буферов он используется приложениями верхнего уровня;

4.3 Объем и жизненный цикл Spring Bean

4.3.1 Область применения

В Spring объекты, составляющие тело приложения и управляемые контейнером Spring IoC, называются bean-компонентами. Короче говоря, компонент — это объект, который инициализируется, собирается и управляется контейнером IoC.

Области действия Bean в основном следующие:

  1. Синглтон

Область примененияSingleton,Этот режим небезопасен при многопоточности, что указывает на то, что в контейнере IoC есть только один общий экземпляр Bean, и все запросы на Bean в основномidсоответствует определению bean-компонента, то возвращается тот же экземпляр bean-компонента.SingletonЭто одноэлементная модель, то есть объект Bean создается автоматически при создании контейнера, независимо от того, используется он или нет, иОбъект, полученный каждый раз, является одним и тем же объектом.

  1. Прототип: используется каждый раз при создании

Область примененияPrototype, указывая на то, что определение bean-компонента соответствует нескольким экземплярам, ​​и bean-компонент в этой области вызоветНовый экземпляр компонента создается каждый раз, когда запрашивается компонент..PrototypeЭто тип-прототип, который не создается при создании контейнера, но создает объект, когда мы получаем bean-компонент, и каждый раз получаемый объект отличается.

  1. Запрос: запрашивать один экземпляр за раз

Область примененияRequest,показать за один разHTTPзапрос, контейнер возвращает тот же экземпляр bean-компонента, то есть каждыйHTTPКаждый запрос имеет собственный экземпляр компонента, который создается в соответствии с определением компонента и действителен только в случае Web-приложения Spring ApplicationContext. когда однаждыHTTPКогда обработка запроса завершается, все экземпляры компонентов в этой области уничтожаются.

  1. Session

Область примененияSession,показыватьвHTTP Session, контейнер возвращает один и тот же экземпляр компонента, но для разныхSessionзапрос создает новый экземпляр, которыйBeanЭкземпляр только в настоящее времяSessionдействует в течение, который действителен только в случае веб-приложения Spring ApplicationContext. когдаHTTP SessionКогда bean-компоненты в этой области устарели, они также будут признаны недействительными.

класс области видимости иллюстрировать
Singleton В контейнере Spring IoC есть только один экземпляр Bean, который существует как синглтон, что является значением по умолчанию в Spring.
Prototype Новый экземпляр возвращается каждый раз, когда bean-компонент вызывается из контейнера, т. е. каждый вызовgetBean()метод, эквивалентныйnewновый объект
Request Создает новый компонент для каждого HTTP-запроса, работает только в среде WebApplicationContext.
Session Каждый сеанс HTTP использует общий компонент, разные сеансы используют разные компоненты, применимые только к среде WebApplicationContext.

4.3.2 Жизненный цикл

  1. Spring создает экземпляр Bean;
  2. Spring вводит значение и ссылку на Bean в соответствующее свойство Bean;
  3. Если компонент реализует интерфейс BeanNameAware, Spring передает идентификатор компонента методу setBeanName();
  4. Если компонент реализует интерфейс BeanFactoryAware, Spring вызоветsetBeanFactory()метод, передайте ссылку на приложение, в котором находится бин;
  5. Если компонент реализует интерфейс ApplicationContextAware, Spring вызоветsetApplicationContext()метод, передайте ссылку на приложение, в котором находится бин;
  6. Если компонент реализует интерфейс BeanPostProcessor, Spring вызоветpost-ProcessBeforeInitalization()метод;
  7. Если Бин реализуетInitializingBeanинтерфейс, Spring вызовет ихafter-PropertiesSet()метод, аналогично, если бин используетinit-methodЕсли объявлен метод инициализации, этот метод также будет вызван;
  8. Если компонент реализует интерфейс BeanPostProcessor, Spring вызовет ихpost-ProcessAfterInitialization()метод;
  9. На этом этапе bean-компоненты готовы, и мы можем их использовать приложением, они останутся в контексте приложения, пока приложение не будет уничтожено;
  10. Если компонент реализует интерфейс DisposableBean, Spring вызовет егоdestory()методы интерфейса; опять же, если бин используетdestroy-methodОбъявлен метод Destroy, этот метод также будет вызываться;

4.4 Четыре способа внедрения зависимостей Spring

  1. Внедрение конструктора
// 带参,方便用构造器进行注入
public CatDaoImpl(String name){
	this.name = name;
}
<bean id="CatDaoImpl" class="com.cunyu.CatDaoImpl">
	<constructor-arg value="name"></constructor-arg>
</bean>
  1. инъекция сеттерного метода
public class Id {
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
<bean id="id" class="com.cunyu.Id ">
    <property name="id" value="1801333"></property>
</bean>
  1. статический заводской впрыск

Так называемая статическая фабрика предназначена для получения требуемых объектов путем вызова метода статической фабрики, и для облегчения управления Spring мы не можем получать объекты через «метод class.static()», а должны вводиться в виде весны;

// 静态工厂
public class DaoFactory {
    public static final FactoryDao getStaticFactoryDaoImpl(){
        return new StaticFacotryDaoImpl();
    }
}
public class SpringAction {
    // 需要注入的对象
    private FactoryDao staticFactoryDao;
    // 注入对象的 set 方法
    public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
        this.staticFactoryDao = staticFactoryDao;
    }
}
<bean name="springAction" class="com.cunyu.SpringAction" >
    <!--利用静态工厂的方法注入对象-->
    <property name="staticFactoryDao" ref="staticFactoryDao"></property>
</bean>
<!--从工厂类获取静态方法-->
<bean name="staticFactoryDao" class="com.cunyu.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>
  1. фабрика экземпляров

Фабрика экземпляров означает, что метод получения экземпляра объекта не является статическим, поэтому вам нужно сначалаnewФабричный класс, а затем вызывать обычные методы экземпляра;

// 实例工厂
public class DaoFactory {
    public FactoryDao getFactoryDaoImpl(){
        return new FactoryDaoImpl();
    }
}
public class SpringAction {
    // 注入对象
    private FactoryDao factoryDao;
    public void setFactoryDao(FactoryDao factoryDao) {
        this.factoryDao = factoryDao;
    }
}
<bean name="springAction" class="com.cunyu.SpringAction">
    <!--使用实例工厂的方法注入对象,对应下面的配置文件-->
    <property name="factoryDao" ref="factoryDao"></property>
</bean>

<!--此处获取对象的方式是从工厂类中获取实例方法-->
<bean name="daoFactory" class="com.cunyu.DaoFactory"></bean>
<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>

4.5 Метод автоматической сборки пружины

Для достижения автоматической сборки она в основном реализуется со следующих двух точек зрения:

  1. Сканирование компонентов: Spring автоматически обнаружит bean-компоненты, созданные в контексте приложения;
  2. Автопроводка: Spring автоматически удовлетворяет зависимости между bean-компонентами;

Комплект пружин включаетРучная передача и автоматическая сборка,Ручная сборка производитсяXMLсборка, метод строительства,setterметод и др.;

Существуют следующие типы автоматического связывания, которые позволяют контейнеру Spring выполнять внедрение зависимостей посредством автоматического связывания;

Метод сборки иллюстрировать
no Нет автоматического подключения по умолчанию, если явно указатьrefсвойства для сборки
byName Через автосвязывание имени параметра контейнер Spring находит в конфигурационном файлеBeanизautowireсвойство установлено наbyNameПосле попытки сопоставить, загрузите и этоBeanсвойства с тем же именемBean
byType При автоподключении типа параметра контейнер Spring находит в файле конфигурацииBeanизautowireсвойство установлено наbyTypeПосле попытки сопоставить, загрузите и этоBeanоднотипные свойстваBean, если несколькоBeanЕсли условие выполнено, выдать ошибку
constructor похожий наbyType, но его нужно указать в параметре конструктора, если нет фиксированного типа параметра конструктора с параметрами, будет выброшено исключение
autodetect Сначала попробуйте использоватьconstructorдля автоподключения, если это не сработает, используйтеbyTypeСпособ

4.6 Преимущества и недостатки IoC

  1. преимущество: разделение между компонентами для повышения удобства обслуживания и гибкости программы;
  2. недостаток: шаги по созданию объекта сложны, и есть определенная стоимость обучения, использование отражения для создания объекта снизит эффективность;

5. Принципы АОП

5.1 Определения

То есть проанализируйте внутреннюю часть инкапсулированного объекта и инкапсулируйте общедоступное поведение, влияющее на несколько классов, в повторно используемый модуль и назовите его какAspect,касательная. Так называемый разрезЭто не имеет никакого отношения к бизнесу, но логика, разделяемая бизнес-модулями, удобна для сокращения повторяющегося кода системы, уменьшения степени связанности между модулями и облегчения последующей работоспособности и ремонтопригодности..

Используя crosscuts, АОП разделяет программное обеспечение на:Основные и сквозные проблемы. Основной поток бизнес-процессов является основной задачей и имеет мало общего со сквозными задачами.Характеристики сквозных проблем заключаются в том, что они часто возникают в нескольких местах основной проблемы и в основном одинаковы везде.. Роль АОПРазделение различных проблем в системе, разделение основных и сквозных проблем.

5.2 Основные концепции

5.3 Два прокси-режима АОП

Spring предоставляет два способа создания прокси-объектов: JDK Proxy и CGlib.Стратегия по умолчанию заключается в использовании технологии динамического прокси JDK, если целевой класс является интерфейсом, в противном случае используйте CGlib для создания прокси.;

  1. Прокси динамического интерфейса JDK

В основном участвуетProxyа такжеInvocationHandler,InvocationHandlerЭто интерфейс, который определяет сквозную логику путем реализации интерфейса и вызывает код целевого класса через механизм отражения для динамической компиляции сквозной логики и бизнес-логики вместе. а такжеProxyзатем используйтеInvocationHandlerДинамически создавать экземпляр, соответствующий определенному интерфейсу, и генерировать прокси-объект целевого класса;

  1. Динамический прокси CGlib

полное имяCode Generation Library,Это высокопроизводительная высококачественная библиотека для генерации кода, которая может расширять классы Java и реализовывать интерфейсы Java во время выполнения.CGlib инкапсулирует ASM и может динамически генерировать новые классы во время выполнения.

  1. Разница между динамическим прокси JDK и динамическим прокси CGlib

Динамический прокси JDK может создавать экземпляры прокси только для интерфейсов, а для классов, не определяющих бизнес-методы через интерфейсы, необходимо создавать динамические прокси через CGlib;

5.4 Типы уведомлений для Аспектов

  1. До уведомления: целевой метод вызывает уведомление перед вызовом;
  2. Опубликовать уведомление (после): уведомление о вызове после завершения целевого метода;
  3. После возвращения: Уведомление о вызове после успешного выполнения целевого метода;
  4. Уведомление об исключении (после броска): уведомление о вызове после того, как целевой метод выдает исключение;
  5. Вокруг уведомлений (вокруг): выполнение пользовательского поведения до и после вызова метода с уведомлением;

6. Spring MVC

6.1 Что такое структура MVC?

MVC, полное название Model View Controller, является аббревиатурой от model-view-controller и представляет собой модель проектирования программного обеспечения. Организуйте код таким образом, чтобы разделить бизнес-логику, данные и отображение интерфейса, объединить бизнес-логику в один компонент, а затем улучшить и настроить интерфейс и взаимодействие с пользователем без переписывания бизнес-логики;

Основные преимущества использования шаблона проектирования MVC заключаются в следующем:

  1. Благодаря многоуровневому дизайну реализуется структура между компонентами бизнес-системы, что способствует масштабируемости и ремонтопригодности бизнес-системы;
  2. Способствует параллельному развитию системы и повышению эффективности разработки;

6.2 SpringMVC

6.2.1 Определения

Spring MVC — это модуль среды Spring, основанной на MVC;

6.2.2 Компоненты

  1. DispatcherServlet: основной компонент, интерфейсный контроллер, также называемый центральным контроллером, который планирует связанные компоненты,Используется для получения результатов запроса и ответа, эквивалентного повторителю, сDispatcherServletуменьшить связь между другими компонентами;
  2. HandlerMapping: сопоставитель обработчика, который сопоставляется с разными путями URLHandler;
  3. HandlerAdapter: Адаптер процессора, согласноHandlerAdapterправила для обеспечения соблюденияHandler;
  4. Handler: процессор, разработанный нами под бизнес;
  5. ViewResolver: синтаксический анализатор представлений, который анализирует логические представления в определенные представления;
  6. View: интерфейс, поддерживающий различные типы представлений;

6.2.3 Рабочий процесс MVC

  1. Браузер отправляет запрос, передняя панель управленияDispatcherServletперехватить запрос;
  2. DispatcherServletПосле перехвата запроса проанализируйте URL-адрес запроса, получите URI идентификатора ресурса запроса и выполните вызов в соответствии с URI.HandlerMappingЗатем получите соответствующийHandler;
  3. DispatcherServletполучатьHandlerПосле этого найдитеHandlerAdapter, через который можно получить доступHandler, и запустить процессор;
  4. воплощать в жизньHandlerлогика, возвращаетModelAndViewВозражатьDispatcherServlet;
  5. потомDispatcherServletпроситьViewResolverРазобрать представление, разобрать реальное представление на основе имени логического представления.View;
  6. потомViewResolverбудет проанализированViewВернуться кDispatcherServlet, тогда правильноViewоказывать;
  7. затем поDispatcherServletреагировать на просмотр в браузере;

6.2.4 Преимущества SpringMVC

  1. Имеет характеристики Весны;
  2. Поддержка нескольких представлений;
  3. Простота настройки, неинвазивность;
  4. Слои более четкие, что способствует поддержанию кода, разработанного командой, и читабельность хорошая;

6.3 Примечания

6.3.1 Принцип аннотации

Аннотация представляет собой интегрированныйAnnotationСпециальный интерфейс, конкретный класс реализации которого является динамическим прокси-классом, созданным средой выполнения Java. Когда аннотация получена посредством отражения, возвращается динамический прокси-объект, сгенерированный средой выполнения Java. Вызов метода пользовательской аннотации через прокси-объект в конечном итоге вызоветAnnotationInvocationHandlerизinvokeметод, то метод начинается сmemberValuesизMapИндексируйте соответствующее значение;

6.3.2 Общие примечания

аннотация иллюстрировать
@RequestMapping для обработки запросовurlАннотацию сопоставления можно использовать в классах или методах.При использовании в классах это означает, что все методы, отвечающие на запросы, используют этот адрес в качестве родительского пути.
@RequestBody осуществлять приемHTTPпросилjsonданные, будетjsonПреобразовать в объект Java
@ResponseBody реализация будетcontrollerМетод возвращает объект в объект Json и отвечает клиенту