I-ASOS Cvičenie 8

8. cvičenie Spring AOP

Pozn. 1. úloha je len prípravou projektu pre precvicovanie AOP v úlohách 2. – 4. Najzaujímavejšia je úloha 5.

Úloha 1.

implementujte modifikáciu 1. spring projektu z prednášky 7, ktorá bude okrem komponent messageService a messageProcessor mať ďalšiu komponentu messageConsumerMessage procesor bude správy čítať z message servisu a posielať ich message konsumerovi. Pre messageConsumer definujte interface a implementujte mock ktorý správu vypíše. Teda:

  • MessageConsumerIfc – konsumer interface

  • MessageConsumerMock – dummy implementácia konsumera správu jednoducho len správu vypiše.

  • MessageProcessor – upravená implementácia procesora číta správy zo servisu a posiela ich konsumerovi

Pozn i implementácii:

  • MessageService ani hlavný program nie je potrebné modifikovať.

  • do spring xml konfigurácie (beans.xml) treba pridať messageConsumer bean (a v messageProcesore doplniť inicializaciu jeho referenciu)

  • alternatívne môžete namiesto constructor-based DI použiť setter-based DI a tiež namiesto xml kofigurácie kontainera použiť java-based konfiguráciu

Úloha 2.

Aplikáciu z 1.úlohy doplňte o aspekt, ktorý implementuje logovanie volaní všetkých metód všetkých komponent.

  • Na logovanie použite before advice, ktorý vypíš na obrazovku signatúru volanej funkcie (pozri prednášku 8)

Úloha 3.

  1. Aplikáciu z 1.úlohy doplňte o aspekt, ktorý počíta počet volaní metódy getMessage .
    • použite before advice, ktorý si uchováva počet vo svojej property
    • main aplikáciu upravte tak, že viackrát zavolá processMessage, a nakoniec prečíta počet (z property aspektu beanu) a vypíše ho na obrazovku.
  2. Aspekt doplňte o ďaší advice, ktorý spočíta sumárnu dĺžku všetkých reťazcov vrátených metódou getMessage. Použite after advice a na konci behu programu vypíšte aj sumárnu dĺžku.

Úloha 4.

Aplikáciu z 1.úlohy doplňte o aspekt, ktorý bude šifrovať/dešifrovať správy poskytované messageServisom tak, aby počas prechodu messageProcesorom boli zašifrované:

  • použite nejaký ľahko implementovateľný šifrovací algoritmus napr. Cezarovu šifru.
  • na zašifrovanie použite around advice pre volania metódy getMessage,
  • na dešifrovanie použite around advice pre volania metódy putMessage. Pre overenie šifrovania môže tento advice vypísať na obrazovku zašifrovanú správu (nezašifrovanú vypísuje messageConsumer)

Úloha 5.

  1. Wizardom vytvorte jednoduchý web servis, nazvite ho HelloServis, postačí wizardom vygenerovaná hello operácia

  2. Implementujte web servis klienta ako spring aplikáciu, pričom proxy objekt (presnejšie jeho port) bude komponenta.

    Skúste si najprv sami nájsť spôsob riešenia. Na vytvorenie komponenty bude potrebná faktory metóda, pozrite si: https://www.javatpoint.com/dependency-injection-with-factory-method(Detaily riešenia)

  3. Na strane web servis klienta implementujte aspekt, ktorý bude šifrovať/dešifrovať komunikáciu so servisom podobne ako v úlohe 4.