Главная страница
Навигация по странице:

  • ApplicationContext предоставляет

  • Основные этапы поднятия ApplicationContext

  • 2. Настройка созданных BeanDefinition ( BeanFactoryPostProcessor ); 3. Создание кастомных FactoryBean ( FactoryBean T

  • 5. Настройка созданных бинов (BeanPostProcessor); 2.2. Что такое BeanDefinition

  • 2.3. Способы конфигурации бинов

  • 2.4. ApplicationContext и BeanFactory, чем отличаются В каких случаях что стоит использовать

  • 2.5. Как получить ApplicationContext в интеграционном тесте

  • @ContextConfiguration(classes = JavaConfig.class)

  • 2.6. Как завершить работу ApplicationContext

  • Динамический прокси-класс

  • Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми


    Скачать 0.73 Mb.
    НазваниеИнструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
    Дата13.11.2022
    Размер0.73 Mb.
    Формат файлаdocx
    Имя файла2.docx
    ТипИнструкция
    #785689
    страница2 из 26
    1   2   3   4   5   6   7   8   9   ...   26

    2.1. Что такое ApplicationContext?


    ApplicationContext — это главный интерфейс в Spring-приложении, который предоставляет информацию о конфигурации приложения. Он доступен только для чтения во время выполнения, но может быть перезагружен при необходимости и поддержке приложением.

    Число классов, реализующих ApplicationContext интерфейс, доступны для различных параметров конфигурации и типов приложений.

    В Spring Framework интерфейс org.springframework.factory.BeanFactory предоставляет фабрику для бинов, которая в то же время является IoC контейнером приложения. Управление бинами основано на конфигурации (java или xml).



    ApplicationContext предоставляет:

    1. Фабричные методы бина для доступа к компонентам приложения;

    2. Возможность загружать файловые ресурсы в общем виде;

    3. Возможность публиковать события и регистрировать обработчики на них;

    4. Возможность работать с сообщениями с поддержкой интернационализации;

    5.Наследование от родительского контекста.

    Основные этапы поднятия ApplicationContext:

    1. Парсирование конфигурации (xml, groovy, JavaConfig и пр.) и создание всех BeanDefinition (AnnotatedBeanDefinitionReader, BeanDefinitionReader, ClassPathBeanDefinitionScanner);

    2. Настройка созданных BeanDefinition (BeanFactoryPostProcessor);

    3. Создание кастомных FactoryBean (FactoryBean<T>);

    4. BeanFactory создает экземпляры бинов, при необходимости делегируя создание FactoryBean (BeanFactory)

    5. Настройка созданных бинов (BeanPostProcessor);

    2.2. Что такое BeanDefinition?


    BeanDefinition — это интерфейс, который описывает бин, его свойства, аргументы конструктора и другую метаинформацию.

    2.3. Способы конфигурации бинов?


    У Spring есть 4 популярных способа конфигурации:

    1. XML конфигурация – использует ClassPathXmlApplicationContext(“config.xml”);

    2. Groovy конфигурация – использует GenericGroovyApplicationContext(“config.groovy”);

    3. Конфигурация через аннотации с указанием пакета для сканирования – использует AnnotationConfigApplicationContext(”package.name”);

    4. JavaConfig – это конфигурация через аннотации с указанием класса (или массива классов) помеченного аннотацией @Configuration — AnnotationConfigApplicationContext(JavaConfig.class).

    2.4. ApplicationContext и BeanFactory, чем отличаются? В каких случаях что стоит использовать?


    BeanFactory — это интерфейс, который предоставляет механизм конфигурации, способный управлять объектами любого типа.

    В общем, BeanFactory предоставляет инфраструктуру конфигурации и основные функциональные возможности. BeanFactory легче по сравнению с ApplicationContext.

    ApplicationContext является наследником BeanFactory и полностью реализует его функционал, добавляя больше специфических enterprise-функций.

    2.5. Как получить ApplicationContext в интеграционном тесте?


    Если вы используете JUnit 5, то вам нужно указать 2 аннотации: @ExtendWith(TestClass.class) — используется для указания тестового класса;

    @ContextConfiguration(classes = JavaConfig.class) — загружает java/xml конфигурацию для создания контекста в тесте.

    Можно использовать аннотацию @SpringJUnitConfig, которая сочетает обе эти аннотации. Для теста веб-слоя можно использовать аннотацию @SpringJUnitWebConfig.

    2.6. Как завершить работу ApplicationContext?


    Если не веб-приложение: Регистрация shutdown-hook с помощью вызова метода registerShutdownHook(), он также реализован в классе AbstractApplicationContext. Это предпочтительный способ.

    Можно вызвать метод close() из класса AbstractApplicationContext.

    В Spring Boot: Spring Boot самостоятельно зарегистрирует shutdown-hook за вас.

    3. Чем бин отличается от POJO-класса?


    Любой POJO может быть бином, но не любой POJO является бином. Можно создать бин из любого POJO класса, потом его передавать (инжектить) в любой бин.

    Для того чтобы инжекция была «прозрачной», то рекомендуется делать ее через конструктора. На крайний случай через метод, но никогда не через поле.

    По словам Мартина Фаулера, POJO — это объект, который инкапсулирует бизнес-логику, а Bean (за исключением определения, уже указанного в других ответах) — это немного больше, чем контейнер для хранения данных, а операции, доступные на объекте, просто устанавливаются и получить данные.

    Класс pojo — это обычный класс без каких-либо специальностей, класс, полностью не связанный с технологией /framework. Класс не реализуется из технологии/структуры и не распространяется на технологию/инфраструктуру api, этот класс называется классом pojo.

    POJO может реализовывать интерфейсы и расширять классы, но суперкласс или интерфейс не должны быть технологией/каркасом.

    JavaBean — это объект Java, который удовлетворяет определенным соглашениям о программном обеспечении:

    1. Поля должны быть private;

    2. У полей должны быть геттеры и сеттеры;

    3. Должен быть публичный конструктор без аргументов;

    4. Класс должен быть Serializable;

    5. Не должен являться динамическим Proxy-объектом.

    Динамический прокси-класс – это класс, который реализует список интерфейсов, определенных во время выполнения так, что, вызов метода через один из интерфейсов на экземпляре класса будет закодирован и диспетчеризирован другому объекту через универсальный интерфейс.

    1   2   3   4   5   6   7   8   9   ...   26


    написать администратору сайта