Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Projektowanie warstwy serwera Programowanie aspektowe.

Podobne prezentacje


Prezentacja na temat: "Projektowanie warstwy serwera Programowanie aspektowe."— Zapis prezentacji:

1 Projektowanie warstwy serwera Programowanie aspektowe

2 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 2 Programowanie aspektowe Metoda programowania mająca na celu modularyzację kodu i likwidację nakładających się problemów przekrojowych

3 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 3 AOP - przykłady zastosowania – logowanie, profilowanie, cacheowanie – autoryzacja i uwierzytelnianie – zarządzanie błędami, transakcje – sprawdzanie poprawności danych – rejestracja zmian

4 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 4 AOP – podstawowe pojęcia (I) Aspekt - wydzielona funkcjonalnie cześć programu, realizująca konkretne zadanie i koncentrująca sie tylko na problemie, którego dotyczy (np. logowanie, monitorowanie aplikacji, zarządzanie transakcjami). Podstawowe pojęcia AOP –aspekt (aspect): nazwany problem przekrojowy, inaczej to zbiory rad i punktów cięć/złączeń –rada (advice): dodatkowe zachowanie/czynność które zostaje zaninicjowane w punkcie złączenia, –punkt złączenia (join point): miejsce w strukturze wykonywania się aplikacji w którym powinna zostać zastosowana rada.

5 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 5 AOP – podstawowe pojęcia (II)

6 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 6 Spring AOP framework Rodzaje rad: –around advice: wykonuje się przed i po punkcie styku, ma możliwość przerwania przepływu kontroli programu przez zwrócenie własnej wartości lub wyjątku, –before advice: wykonuje się przed punktem styku, nie może zablokować przepływu kontroli programu, –throws advice: wykonuje się w momencie zgłoszenia wyjątku, –after returning advice: wykonuje się po poprawnym wykonaniu.

7 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 7 Around Advice Zgodność z AOP Alliance. Przechwycenie wywołania metody. Może zastąpić Before, After oraz Throws Advice. Możliwość zatrzymania wywołania metody. Możliwość zwrócenia innego obiektu niż przechwycona metoda.

8 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 8 Before Advice Wplatany przed wywołaniem metody. Zatrzymanie wykonania metody tylko poprzez wyrzucenie wyjątku. Ograniczone możliwości modyfikacji parametrów wywołania metody.

9 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 9 After Advice Wplatany przy udanym powrocie z metody. Ograniczone możliwości zmiany wyniku zwróconego przez metodę.

10 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 10 Throws Advice Wplatany w przypadku wyrzucenia wyjątku przez metodę. Możliwość zaimplementowania różnych metod dla różnych wyjątków w jednej klasie. Brak możliwości zatrzymania wyjątku.

11 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 11 Implementacja (I) public class TracingBeforeAdvice implements MethodBeforeAdvice { public void before(Method m, Object[] args, Object target) throwsThrowable { System.out.println("Before method : "+ m.getName() ); }

12 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 12 Implementacja (II) public class TracingAfterAdvice implements AfterReturningAdvice { public void afterReturning(Object object, Method m, Object[] args, Object target) throwsThrowable { System.out.println("After method : "+ m.getName()); }

13 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 13 Konfiguracja (I) <bean id=proxybean" class="org.springframework.aop.framework.ProxyFactoryBean"> theTracingBeforeAdvisor theTracingAfterAdvisor

14 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 14 Konfiguracja (II) <bean id="theTracingBeforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">.*

15 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 15 Przykład public class TimeInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation method) throwsThrowable { long start = System.currentTimeMillis(); try {Objectresult= method.proceed(); return result; } finally { long end= System.currentTimeMillis(); long timeMs= end-start; System.out.println("Method: " + method.toString() + " took: " + timeMs+"ms."); }}}

16 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 16 @Aspect public class MyAspect {..... }

17 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 17 @Pointcut @Pointcut("execution(* transfer(..))") private void my() {} execution target args

18 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 18 execution execution(public * *(..)) execution(* set*(..)) execution(* com.xyz.service.*.*(..)) execution(* com.xyz.service..*.*(..)) execution (public * dao.commons..*.update(..)))

19 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 19 Stosowane adnotacje @Before() @AfterReturning(Object) @AfterThrowing(Exception) @After() @Around(ProceedingJoinPoint)

20 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 20 @Around @Around("execution(* dao..*.get(..))") public Object applySecurity(ProceedingJoinPoint joinpoint) throws Throwable { logger.debug("Applying Security"); Object obj = joinpoint.proceed();..... return obj; }

21 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 21 Przykład @Aspect public class DataUpdateInterceptor { @After("(execution(public *dao.commons..*.update(..)) || " + "execution(public *dao.commons..*.save(..)) ) && " + " target(dao.GenericDAO)") public void updateDataAspect(JoinPoint jp) { logger.debug("nastapila zmiana w danych"); }

22 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 22 Konfiguracja

23 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 23 @Auditable @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Auditable { }

24 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 24 @NonAuditableField @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface NonAuditableField { }

25 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 25 Klasa domenowa @Auditable @Entity public class Uzytkownik {.... @NonAuditableField @Column(nullable = true, length = 64) private String haslo;....

26 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 26 AudytInterceptor (I) @Transactional(propagation = Propagation.MANDATORY) public class AudytInterceptor extends EmptyInterceptor { private AuditLoggerService auditLoggerService;...

27 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 27 AudytInterceptor (II) @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { if (entity.getClass().isAnnotationPresent(Auditable.class)) { auditLoggerService.logSave(entity, id, state, propertyNames, types); } return super.onSave(entity, id, state, propertyNames, types); }

28 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 28 AudytInterceptor (III) @Override public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { if (entity.getClass().isAnnotationPresent(Auditable.class)) { auditLoggerService.logDelete(entity, id); } super.onDelete(entity, id, state, propertyNames, types); }

29 Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 29 Interceptor (III) <bean id="audytInterceptor" class="commons.interceptor.AudytInterceptor">


Pobierz ppt "Projektowanie warstwy serwera Programowanie aspektowe."

Podobne prezentacje


Reklamy Google