🗊Презентация Spring Core. Spring AOP

Нажмите для полного просмотра!
Spring Core. Spring AOP, слайд №1Spring Core. Spring AOP, слайд №2Spring Core. Spring AOP, слайд №3Spring Core. Spring AOP, слайд №4Spring Core. Spring AOP, слайд №5Spring Core. Spring AOP, слайд №6Spring Core. Spring AOP, слайд №7Spring Core. Spring AOP, слайд №8Spring Core. Spring AOP, слайд №9Spring Core. Spring AOP, слайд №10Spring Core. Spring AOP, слайд №11Spring Core. Spring AOP, слайд №12Spring Core. Spring AOP, слайд №13Spring Core. Spring AOP, слайд №14Spring Core. Spring AOP, слайд №15Spring Core. Spring AOP, слайд №16Spring Core. Spring AOP, слайд №17Spring Core. Spring AOP, слайд №18Spring Core. Spring AOP, слайд №19Spring Core. Spring AOP, слайд №20Spring Core. Spring AOP, слайд №21Spring Core. Spring AOP, слайд №22Spring Core. Spring AOP, слайд №23Spring Core. Spring AOP, слайд №24Spring Core. Spring AOP, слайд №25Spring Core. Spring AOP, слайд №26Spring Core. Spring AOP, слайд №27Spring Core. Spring AOP, слайд №28Spring Core. Spring AOP, слайд №29Spring Core. Spring AOP, слайд №30Spring Core. Spring AOP, слайд №31Spring Core. Spring AOP, слайд №32Spring Core. Spring AOP, слайд №33Spring Core. Spring AOP, слайд №34

Содержание

Вы можете ознакомиться и скачать презентацию на тему Spring Core. Spring AOP. Доклад-сообщение содержит 34 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Spring Core
Spring AOP
Описание слайда:
Spring Core Spring AOP

Слайд 2





AOP :: Пример
Рассмотрим метод получения пользователя по id:

public class UserService {
public UserDTO getUser(Integer id) {     
return userDAO.getUser(id);   
}
}
Описание слайда:
AOP :: Пример Рассмотрим метод получения пользователя по id: public class UserService { public UserDTO getUser(Integer id) {  return userDAO.getUser(id); } }

Слайд 3





AOP :: Пример
Рассмотрим метод получения пользователя по id:

public class UserService {
public UserDTO getUser(Integer id) {     
return userDAO.getUser(id);   
}
}

Добавим логгирование:

public UserDTO getUser(Integer id) {    
log.debug("Call method getUser with id " + id);
UserDTO user = userDAO.getUser(id);   
log.debug("User info is: " + user.toString());
return user;   
}
Описание слайда:
AOP :: Пример Рассмотрим метод получения пользователя по id: public class UserService { public UserDTO getUser(Integer id) {  return userDAO.getUser(id); } } Добавим логгирование: public UserDTO getUser(Integer id) {  log.debug("Call method getUser with id " + id); UserDTO user = userDAO.getUser(id);   log.debug("User info is: " + user.toString()); return user; }

Слайд 4





AOP :: Пример
Добавим обработку исключений:

public UserDTO getUser(Integer id) throws ServiceException{
   log.debug("Call method getUser with id " + id);   
   UserDTO user = null;
   UserDTO user = userDAO.getUser(id);
   try {
       user = userDAO.getUser(id);
   } catch(SQLException e) {
       throw new ServiceException(e);
   }

   log.debug("User info is: " + user.toString());   
   return user;
}
Описание слайда:
AOP :: Пример Добавим обработку исключений: public UserDTO getUser(Integer id) throws ServiceException{ log.debug("Call method getUser with id " + id); UserDTO user = null;    UserDTO user = userDAO.getUser(id); try { user = userDAO.getUser(id); } catch(SQLException e) { throw new ServiceException(e); } log.debug("User info is: " + user.toString());   return user; }

Слайд 5





AOP :: Пример
Добавим проверку прав пользователя:

public UserDTO getUser(Integer id) throws ServiceException, AuthException{
   if (!SecurityContext.getUser().hasRight("getUser")) {
        throw new AuthException("Permission Denied");
   }

   log.debug("Call method getUser with id " + id);   
   UserDTO user = null;
   UserDTO user = userDAO.getUser(id);

   try {
       user = userDAO.getUser(id);
   } catch(SQLException e) {
       throw new ServiceException(e);
   }

   log.debug("User info is: " + user.toString());   
   return user;
}
Описание слайда:
AOP :: Пример Добавим проверку прав пользователя: public UserDTO getUser(Integer id) throws ServiceException, AuthException{ if (!SecurityContext.getUser().hasRight("getUser")) { throw new AuthException("Permission Denied"); } log.debug("Call method getUser with id " + id); UserDTO user = null;    UserDTO user = userDAO.getUser(id); try { user = userDAO.getUser(id); } catch(SQLException e) { throw new ServiceException(e); } log.debug("User info is: " + user.toString());   return user; }

Слайд 6





AOP :: Пример
Добавляем кэширование результатов работы:
public UserDTO getUser(Integer id) throws ServiceException, AuthException {
   …
   try {
       if (cache.contains(cacheKey)) {
            user = (UserDTO) cache.get(cacheKey);
       } else {
            user = userDAO.getUser(id);
            cache.put(cacheKey, user);
       }
   } catch(SQLException e) {
       throw new ServiceException(e);
   }
   log.debug("User info is: " + user.toString());   
   return user;
}
Описание слайда:
AOP :: Пример Добавляем кэширование результатов работы: public UserDTO getUser(Integer id) throws ServiceException, AuthException { … try { if (cache.contains(cacheKey)) { user = (UserDTO) cache.get(cacheKey); } else { user = userDAO.getUser(id); cache.put(cacheKey, user); } } catch(SQLException e) { throw new ServiceException(e); } log.debug("User info is: " + user.toString());   return user; }

Слайд 7





AOP :: Пример
Что мы получаем:
Большой объем сервисного кода
Вместо одной строки мы получили 16. И это количество продолжает расти...

Виды ортогональной функциональности
Логгирование
Обработка исключений
Транзакции
Кэширование
Проверка прав пользователя
и многое другое...
Минусы сервисного кода в основном коде:
Растет объем кода
Сложнее поддерживать
Дублирование кода
Решение: использовать аспекты
Вынести ортогональную функциональность в отдельные классы – аспекты
Описание слайда:
AOP :: Пример Что мы получаем: Большой объем сервисного кода Вместо одной строки мы получили 16. И это количество продолжает расти... Виды ортогональной функциональности Логгирование Обработка исключений Транзакции Кэширование Проверка прав пользователя и многое другое... Минусы сервисного кода в основном коде: Растет объем кода Сложнее поддерживать Дублирование кода Решение: использовать аспекты Вынести ортогональную функциональность в отдельные классы – аспекты

Слайд 8





Как работают аспекты
Описание слайда:
Как работают аспекты

Слайд 9





AOP :: Введение
Aspect Oriented Programming (AOP) –  аспектно-ориентированное программирование
АОП предоставляет средства для реализации ортогональной (crosscutting) функциональности
Описание слайда:
AOP :: Введение Aspect Oriented Programming (AOP) – аспектно-ориентированное программирование АОП предоставляет средства для реализации ортогональной (crosscutting) функциональности

Слайд 10





AOP :: Введение
Как «ортогональную» бизнес-логику можно реализовать в СУРБД?
Описание слайда:
AOP :: Введение Как «ортогональную» бизнес-логику можно реализовать в СУРБД?

Слайд 11





AOP :: Введение
Пример ортогонального логгирования с использованием триггеров СУРБД:
/* Триггеры на уровне таблицы */
 CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
 AFTER UPDATE ON district
 BEGIN 
  INSERT INTO info VALUES ('table "district" has changed');
 END;
Описание слайда:
AOP :: Введение Пример ортогонального логгирования с использованием триггеров СУРБД: /* Триггеры на уровне таблицы */ CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger AFTER UPDATE ON district BEGIN INSERT INTO info VALUES ('table "district" has changed'); END;

Слайд 12





AOP :: Пример адвайса логгирования

@Aspect
public class LoggingAspect {
   private Logger logger = Logger.getLogger(LoggingAspect.class.getName());

@Around("execution(* *.*User(..))")
public Object log (ProceedingJoinPoint thisJoinPoint) throws Throwable {
        String methodName = thisJoinPoint.getSignature().getName();
        Object[] methodArgs = thisJoinPoint.getArgs();
        logger.info("Call method " + methodName + " with args " + methodArgs);
        Object result = thisJoinPoint.proceed(); 
        logger.info("Method " + methodName + " returns " + result);
        return result;
}

}
Описание слайда:
AOP :: Пример адвайса логгирования @Aspect public class LoggingAspect { private Logger logger = Logger.getLogger(LoggingAspect.class.getName()); @Around("execution(* *.*User(..))") public Object log (ProceedingJoinPoint thisJoinPoint) throws Throwable { String methodName = thisJoinPoint.getSignature().getName(); Object[] methodArgs = thisJoinPoint.getArgs(); logger.info("Call method " + methodName + " with args " + methodArgs); Object result = thisJoinPoint.proceed(); logger.info("Method " + methodName + " returns " + result); return result; } }

Слайд 13





AOP :: Пример адвайса логгирования
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop       
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
   
   <aop:aspectj-autoproxy/>
   
   <bean id="userDao" class="UserDaoImpl"/>
   <bean id="loggingAspect" class = "LoggingAspect"/>
</beans>
Описание слайда:
AOP :: Пример адвайса логгирования <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <aop:aspectj-autoproxy/> <bean id="userDao" class="UserDaoImpl"/> <bean id="loggingAspect" class = "LoggingAspect"/> </beans>

Слайд 14





AOP :: Пример адвайса логгирования
public interface UserDao {
  UserDTO getUser(int id);
}


public class UserDaoImpl implements UserDao { 

public UserDTO getUser(int id) {
if (null != userDaoMap.get(id)) {
	return userDaoMap.get(id);
}

UserDTO user = new UserDTO(id);
userDaoMap.put(id, user);
return user;
}

}
Описание слайда:
AOP :: Пример адвайса логгирования public interface UserDao { UserDTO getUser(int id); } public class UserDaoImpl implements UserDao { public UserDTO getUser(int id) { if (null != userDaoMap.get(id)) { return userDaoMap.get(id); } UserDTO user = new UserDTO(id); userDaoMap.put(id, user); return user; } }

Слайд 15





AOP :: Пример
Описание слайда:
AOP :: Пример

Слайд 16





AOP :: Введение
Работа с DAO без IoC и AOP







Работа с DAO с IoC, но без AOP
Описание слайда:
AOP :: Введение Работа с DAO без IoC и AOP Работа с DAO с IoC, но без AOP

Слайд 17





AOP :: Введение
Работа с DAO с IoC и AOP
Описание слайда:
AOP :: Введение Работа с DAO с IoC и AOP

Слайд 18





AOP :: Введение
Работа с DAO с IoC и AOP
Описание слайда:
AOP :: Введение Работа с DAO с IoC и AOP

Слайд 19





AOP :: Введение
Описание слайда:
AOP :: Введение

Слайд 20





AOP :: Основные понятия
Описание слайда:
AOP :: Основные понятия

Слайд 21





Активация AOP
Weaving (связывание) – процесс применения аспекта к целевому объекту для создания нового прокси-объекта.
Для осуществления связывания использует две дополнительные зависимости:
aspectjrt.jar
aspectjweaver.jar
Также необходимо инициировать создание динамических прокси в файле конфигурации: <aop:aspectj-autoproxy />
Описание слайда:
Активация AOP Weaving (связывание) – процесс применения аспекта к целевому объекту для создания нового прокси-объекта. Для осуществления связывания использует две дополнительные зависимости: aspectjrt.jar aspectjweaver.jar Также необходимо инициировать создание динамических прокси в файле конфигурации: <aop:aspectj-autoproxy />

Слайд 22





AOP :: Язык срезов (pointcut)
Описание слайда:
AOP :: Язык срезов (pointcut)

Слайд 23





AOP :: Язык срезов (pointcut)
Описание слайда:
AOP :: Язык срезов (pointcut)

Слайд 24





AOP :: Срез
Описание слайда:
AOP :: Срез

Слайд 25





AOP :: типы адвайсов
@Around advice – выполняется перед и после joinpoint
Самый мощный из всех адвайсов
@Around("@annotation(com.luxoft.springaop.example2.Log)") 
public Object log (ProceedingJoinPoint thisJoinPoint) throws Throwable {
        String methodName = thisJoinPoint.getSignature().getName();
        Object[] methodArgs = thisJoinPoint.getArgs();
        logger.info("Call method " + methodName + " with args " + 
                    methodArgs);
        Object result = thisJoinPoint.proceed(); 
        logger.info("Method " + methodName + " returns " + result);
        return result;
}
Описание слайда:
AOP :: типы адвайсов @Around advice – выполняется перед и после joinpoint Самый мощный из всех адвайсов @Around("@annotation(com.luxoft.springaop.example2.Log)") public Object log (ProceedingJoinPoint thisJoinPoint) throws Throwable { String methodName = thisJoinPoint.getSignature().getName(); Object[] methodArgs = thisJoinPoint.getArgs(); logger.info("Call method " + methodName + " with args " + methodArgs); Object result = thisJoinPoint.proceed(); logger.info("Method " + methodName + " returns " + result); return result; }

Слайд 26





Примеры использования AOP
Логгирование
Проверки безопасности
Управление транзакциями
Обработка исключений
Проверка прав пользователя
Профилирование
Описание слайда:
Примеры использования AOP Логгирование Проверки безопасности Управление транзакциями Обработка исключений Проверка прав пользователя Профилирование

Слайд 27





AOP :: группировка аспектов
Описание слайда:
AOP :: группировка аспектов

Слайд 28





AOP :: Комбинирование срезов
Описание слайда:
AOP :: Комбинирование срезов

Слайд 29





AOP :: Типы адвайсов
Может решать, исполнять ли joinpoint или вернуть собственное значение:
@Around("com.luxoft.example.SystemArchitecture.businessService()") 
public Object accessRightsCheck(ProceedingJoinPoint pjp) throws Throwable 
{
 
if (currentUser.hasRights()) {
	return pjp.proceed(); 
} else {
	throw new AuthorizationException();
}

return null; 

}
Описание слайда:
AOP :: Типы адвайсов Может решать, исполнять ли joinpoint или вернуть собственное значение: @Around("com.luxoft.example.SystemArchitecture.businessService()") public Object accessRightsCheck(ProceedingJoinPoint pjp) throws Throwable { if (currentUser.hasRights()) { return pjp.proceed(); } else { throw new AuthorizationException(); } return null; }

Слайд 30





AOP :: Использование @AfterThrowing
@Aspect
public class AfterThrowingExample {

   @AfterThrowing(
      pointcut="com.luxoft.example.SystemArchitecture.dataAccessOperation()",
      throwing="ex")
public void doRecoveryActions(DataAccessException ex) {
// ...
}
}

Нет возможности вернуться к вызываемому методу или продолжить обработку на следующей строке
Если здесь обрабатывается исключение, это не помешает ему «всплыть» в цепи
Описание слайда:
AOP :: Использование @AfterThrowing @Aspect public class AfterThrowingExample { @AfterThrowing( pointcut="com.luxoft.example.SystemArchitecture.dataAccessOperation()", throwing="ex") public void doRecoveryActions(DataAccessException ex) { // ... } } Нет возможности вернуться к вызываемому методу или продолжить обработку на следующей строке Если здесь обрабатывается исключение, это не помешает ему «всплыть» в цепи

Слайд 31





AOP :: Обзор типов адвайсов
@Before – выполняется перед joinpoint
Вызов joinpoint можно отменить, только выдав исключение
@Around – выполняется перед и после joinpoint
@AfterReturning – после успешного выполнения joinpoint, например, когда метод выполнился, не выдав исключение
@AfterThrowing – в случае выдачи исключения в joinpoint
@After – в любом случае после выполнения joinpoint
Описание слайда:
AOP :: Обзор типов адвайсов @Before – выполняется перед joinpoint Вызов joinpoint можно отменить, только выдав исключение @Around – выполняется перед и после joinpoint @AfterReturning – после успешного выполнения joinpoint, например, когда метод выполнился, не выдав исключение @AfterThrowing – в случае выдачи исключения в joinpoint @After – в любом случае после выполнения joinpoint

Слайд 32





AOP :: Выстраивание цепочки аспектов
Описание слайда:
AOP :: Выстраивание цепочки аспектов

Слайд 33





AOP :: @Order
Порядок выполнения аспектов можно задать с помощью аннотации @Order:
@Aspect
@Order(1)
public class AspectA
{
  @Before("............")
  public void doIt() {}
}

@Aspect
@Order(2)
public class AspectB
{
  @Before(".............")
  public void doIt() {}
}

Порядок адвайсов в аспекте определяется его порядком в исходном коде аспекта.
Описание слайда:
AOP :: @Order Порядок выполнения аспектов можно задать с помощью аннотации @Order: @Aspect @Order(1) public class AspectA { @Before("............") public void doIt() {} } @Aspect @Order(2) public class AspectB { @Before(".............") public void doIt() {} } Порядок адвайсов в аспекте определяется его порядком в исходном коде аспекта.

Слайд 34





Упражнение
Описание слайда:
Упражнение



Теги Spring Core. Spring AOP
Похожие презентации
Mypresentation.ru
Загрузить презентацию