Презентация Spring Core. Spring AOP онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Spring Core. Spring AOP абсолютно бесплатно. Урок-презентация на эту тему содержит всего 34 слайда. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Spring Core. Spring AOP
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:34 слайда
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:766.77 kB
- Просмотров:82
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№3 слайд
![AOP Пример Рассмотрим метод](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img2.jpg)
Содержание слайда: 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 Пример Добавим обработку](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img3.jpg)
Содержание слайда: 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 Пример Добавим проверку](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img4.jpg)
Содержание слайда: 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 Пример Добавляем](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img5.jpg)
Содержание слайда: 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 Пример Что мы получаем](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img6.jpg)
Содержание слайда: AOP :: Пример
Что мы получаем:
Большой объем сервисного кода
Вместо одной строки мы получили 16. И это количество продолжает расти...
Виды ортогональной функциональности
Логгирование
Обработка исключений
Транзакции
Кэширование
Проверка прав пользователя
и многое другое...
Минусы сервисного кода в основном коде:
Растет объем кода
Сложнее поддерживать
Дублирование кода
Решение: использовать аспекты
Вынести ортогональную функциональность в отдельные классы – аспекты
№12 слайд
![AOP Пример адвайса](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img11.jpg)
Содержание слайда: 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 Пример адвайса](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img12.jpg)
Содержание слайда: 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 Пример адвайса](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img13.jpg)
Содержание слайда: 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;
}
}
№21 слайд
![Активация AOP Weaving](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img20.jpg)
Содержание слайда: Активация AOP
Weaving (связывание) – процесс применения аспекта к целевому объекту для создания нового прокси-объекта.
Для осуществления связывания использует две дополнительные зависимости:
aspectjrt.jar
aspectjweaver.jar
Также необходимо инициировать создание динамических прокси в файле конфигурации: <aop:aspectj-autoproxy />
№25 слайд
![AOP типы адвайсов Around](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img24.jpg)
Содержание слайда: 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;
}
№29 слайд
![AOP Типы адвайсов Может](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img28.jpg)
Содержание слайда: 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 Использование](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img29.jpg)
Содержание слайда: AOP :: Использование @AfterThrowing
@Aspect
public class AfterThrowingExample {
@AfterThrowing(
pointcut="com.luxoft.example.SystemArchitecture.dataAccessOperation()",
throwing="ex")
public void doRecoveryActions(DataAccessException ex) {
// ...
}
}
Нет возможности вернуться к вызываемому методу или продолжить обработку на следующей строке
Если здесь обрабатывается исключение, это не помешает ему «всплыть» в цепи
№31 слайд
![AOP Обзор типов адвайсов](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img30.jpg)
Содержание слайда: AOP :: Обзор типов адвайсов
@Before – выполняется перед joinpoint
Вызов joinpoint можно отменить, только выдав исключение
@Around – выполняется перед и после joinpoint
@AfterReturning – после успешного выполнения joinpoint, например, когда метод выполнился, не выдав исключение
@AfterThrowing – в случае выдачи исключения в joinpoint
@After – в любом случае после выполнения joinpoint
№33 слайд
![AOP Order Порядок выполнения](/documents_6/fd8680cc0f2e48ba022ef47ac8d3e457/img32.jpg)
Содержание слайда: AOP :: @Order
Порядок выполнения аспектов можно задать с помощью аннотации @Order:
@Aspect
@Order(1)
public class AspectA
{
@Before("............")
public void doIt() {}
}
@Aspect
@Order(2)
public class AspectB
{
@Before(".............")
public void doIt() {}
}
Порядок адвайсов в аспекте определяется его порядком в исходном коде аспекта.
Скачать все slide презентации Spring Core. Spring AOP одним архивом:
Похожие презентации
-
2. Java Spring Core 3. Spring IoC Container
-
2. Java Spring Core 2. Maven
-
2. Java Spring Core 1. Overview
-
Git python core
-
Работа с данными в Entity Framework Core. Проектирование и разработка веб-сервисов
-
J2ee Spring. Сервер приложений
-
J2ee Spring. Введение
-
Spring data rest
-
Spring data. Familiar and consistent programming model for data access
-
Spring boot