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

  • 3. Поддержка инфраструктуры

  • 9.4. В чем разница между Spring и Spring Boot

  • Spring Boot особенности

  • 9.5. Аспектно-ориентированное программирование (АОП)

  • АОП фреймворки (

  • Ключевые понятия

  • Spring AOP использует AspectJ Pointcut expression language

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


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

    9.3. Принципы Spring?


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

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

    3. Поддержка инфраструктуры. В фреймворке реализован подход IoC, Inversion of Control — инверсия контроля, принцип, который облегчает зависимости между компонентами. Функциональность помогает поддерживать инфраструктуру внутри проекта.
    В основе работы лежит IoC and DI. IoC - это инверсия управления т.е. подход при котором управление ходом выполнения программы производится фрймворком, который будет вызывать написанный программистом код в нужный ему момент.

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

    Основные понятия в спринге это бин и IoC контейнер, который содержит в себе бины. То какие бины будут находится в контейнере задается при конфигурации спринга (3 вида: xml, при помощи java config, кофигурация при помощи аннотаций).

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

    Далее в коде прописывается, где какие бины нужны, при помощи @Autowire над полем, сетером или конструктором указывается, что данный бин нужно заинжектить и все работает.

    9.4. В чем разница между Spring и Spring Boot?


    Spring Boot – это не отдельный фреймворк, а дополнение к Spring, которое облегчает работу с ним. Spring нужно конфигурировать для каждого нового проекта.

    Конфигурация может занять много времени и не дать ощутимые преимущества в дальнейшей работе. Чтобы исправить проблему, был создан Spring Boot. Он включает комплекс утилит для автоматизации настройки.

    Spring Boot особенности:

    1. автоматически конфигурирует проекты на основе одного из стартовых пакетов для них;

    2. облегчает создание и развертывание приложений на Spring;

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

    4. поддерживает встроенный сервер для запуска приложений; может

    5. автоматически создать и настроить базу данных для приложения.

    При необходимости настройки Spring Boot можно изменить, чтобы он конфигурировал и настраивал компоненты иначе.

    9.5. Аспектно-ориентированное программирование (АОП)?


    Аспектно-ориентированное программирование (Aspect Oriented Programming) – это парадигма программирования, основанная на идее разделения основного и служебного функционала. Служебный функционал записывается в Aspect (аспектные) классы. Эта идея достигается за счет разбиения программы на модули.

    Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ — (2001 год).

    АОП фреймворки (AOPFrameworks):

    1. Spring

    2. AspectJ – это аспектно-ориентированное расширение языка Java, созданное компанией PARC. Язык доступен в проектах Eclipse Foundation как отдельно, так и в составе среды разработки Eclipse.

    Язык стал де-факто стандартом аспектно-ориентированного программирования, подчеркивая простоту и удобство для пользователей. С первого выпуска язык использует Java-подобный синтаксис.

    AspectJ расширяет синтаксис Java, то есть все программы, написанные на Java, будут корректными программами AspectJ, но не наоборот, так как могут включать специальные конструкции, называемые аспектами, которые могут содержать несколько частей, не доступных обычным классам.

    Пример кода:

    aspect VisitAspect {
    void Point.acceptVisitor(Visitor v) {
    v.visit(this);
    }
    }

    Методы расширения позволяют добавлять методы, поля и интерфейсы в существующие классы. Данный пример добавляет метод acceptVisitor (шаблон проектирования посетитель (visitor)) в код класса Point.

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

    Ключевые понятия:

    1. Pointcut (срез точек) – cрезом называется выражение (несколько join points (объединенных точек)), описывающее, где должен быть выполнен advice (совет).

    Spring AOP использует AspectJ Pointcut expression language, т.е определенные правила в написании выражений для создания Pointcut (полужирным обязательные части): execution (modifiers-pattern? Return-type-pattern declaring-type-pattern? Method-name-pattern (parameters-pattern) throws-pattern?)

    Пример:

    @Component
    @Aspect
    public class LoggingAspect {

    @Before("execution(public void getBook())")
    public void beforeGetBookAdvice() {
    System.out.println("beforeGetBookAdvice: попытка получить книгу");
    }
    }
    В Pointcut можно использовать wildcards (* и ..):

    * - обозначает любой символ после или любой тип;

    .. – обозначает любой параметр в любом количестве.

    Пример:

    @After("execution(void get*(*))")
    public void afterCurrentMethod() {
    System.out.println("afterCurrentMethod: после метода get");
    }

    @Before("execution( void com.gmail.at.kotamadeo.UniversityLibrary.get*(..))")
    public void beforeGetSomething() {
    System.out.println("beforeGetSomething: попытка получить что-то");
    }

    @Before("execution(* get*())")
    public void beforeGetSecurityAdvice() {
    System.out.println("beforeGetSecurityAdvice: проверка прав на получение книги/журнала");
    }
    @Pointcut можно объявить для совпадающих Advices, чтобы не использовать copy-paste.

    Пример:

    @Pointcut("execution(* get*(..))")
    private void pointcutReference() {
    }

    @Before("pointcutReference()")
    public void beforeGetSomething() {
    System.out.println("beforeGetSomething: попытка получить что-то");
    }

    @Before("pointcutReference()")
    public void beforeGetSecurityAdvice() {
    System.out.println("beforeGetSecurityAdvice: проверка прав на получение книги/журнала");
    }
    Также @Pointcut можно комбинировать, используя логические операнды ||, ! и &&.

    Пример:

    @Pointcut("afterReturnAdvice() || pointcutReference()")
    private void logCombine() {
    System.out.println("Before Logging #3:");
    }
    @Pointcut("execution(* get*(..))")
    private void pointcutReference() {
    }

    @Pointcut("execution(* return*(..))")
    private void afterReturnAdvice() {
    System.out.println("Before Logging #2:");
    }
    @Pointcut не гарантирует очередность выполнения Advice, ввиду этого необходимо разбить аспекты на под аспекты и использовать аннотацию @Order.
    2. Join Point (точка соединения) – это точка в выполняемой программе, где следует применить advice. Иначе говоря, это некоторое регулярное выражение, с помощью которого и находятся места для внедрения кода (места для применения советов).
    3. Advice (Совет) – это дополнительная логика, код, который вызывается из точки соединения.

    Виды Advice:

    1. @Before (перед) – Advice этого типа запускаются перед выполнением целевых методов – Join Point. При использовании аспектов

    1   ...   4   5   6   7   8   9   10   11   ...   26


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