Что такое SpringAOP?
Количество связанных с программированием, извлеченной независимо, реализован независимо, а затем разрезали на код динамически указанных методов класса, то режим программирования задается положение АОР ( Аспект - ориентированное программирование ).
Объясните понятия АОП
Аспект (раздел): Аспект объявить объявление класса , похожее на Java, аспект будет включен в некотором Pointcut и соответствующие советы.
Совместная точка (точка подключения): указывает на четко определенные точки в программе, в том числе типичных вызовов методов, и т.п. , и выполняя члены класса доступа обработчика исключений сам блок может также гнездятся другие совместные точки.
Pointcut (точка разреза): представляет собой набор совместной точки, совместная точка или с помощью логической комбинации, или с помощью шаблона, регулярных выражений и т.д. вместе, который определяет соответствующие локальные советы произойти.
Рекомендации (Enhanced): совет , определяет процедуры Pointcut точка , которая определяет конкретную операцию нужно сделать, это отличает до, после и перед каждым вокруг совместной точки, после или вместо выполнения кода.
Целевая (аудитория): тканый Advice целевого объекта ..
: Ткачество (ткачество) процесс Aspect и другие объекты вместе и создать объект советовали
Пример:
Интерфейс:
пакет com.java.test6; / ** * @author nidegui * @create 2019-06-23 9:40 * / публичный интерфейс Student { общественного недействительными addStudent (имя String); }
Реализация классов:
пакет com.java.test6; / ** * @author nidegui * @create 2019-06-23 9:41 * / общественного класса StudentImpl реализует Student { @Override общественного аннулируются addStudent (имя String) { System.out.println ( "添加学生" + имя); } }
Вырезать категории Enhancement пункт:
Пакет com.java.test6; Импорт org.aspectj.lang.JoinPoint; Импорт org.aspectj.lang.ProceedingJoinPoint; / ** * @author nidegui * @create 2019-06-23 9:45 * / общественного класса StudentServiceAspect { / / предварительное уведомление, уведомление перед методом общественной пустоты перед (в JoinPoint JP) { System.out.println ( "название класса:" + .. jp.getTarget () GetClass () GetName ()); System.out.println ( "имя метода:" + jp.getSignature () GetName ()) ;. System.out.println ( "студенты начинают добавив:" + jp.getArgs () [0 ]); System.out.println ("Старт добавить студент" ); } // почтовые уведомления общественности недействительным doAfter (JoinPoint JP) { System.out.println ( "Имя класса:" + jp.getTarget () GetClass () GetName ()); .. Система. out.println ( "имя метода:" + . jp.getSignature () GetName ()); System.out.println ( "добавь студент завершил:" + jp.getArgs () [0 ]); } // объемного уведомления общественности doAround Объект (ProceedingJoinPoint ПЭП) бросает на Throwable { System.out.println ( "перед добавлением студента" ); Object RetVal = pjp.proceed (); System.out.println (RetVal); System.out.println ( "После того, как «Добавить студентов); возвращение RetVal; } // возвращение уведомления общественности недействительным doAfterReturning (JoinPoint JP) { System.out.println ( "возвращение уведомления" ); } // ненормальность уведомление общественности недействительным doAfterThrowing (JoinPoint JP, то Throwable EX ) { System.out.println ( "аномалия уведомление" ); System.out.println ( "информация исключения:" + ex.getMessage ()); } }
Файл конфигурации Spring:
<? XML версия = "1,0" кодирующая = "UTF-8" >? < бобы Xmlns = "http://www.springframework.org/schema/beans" Xmlns: XSI = "http://www.w3.org/2001 / XMLSchema инстанции " XMLNS: АОП = "http://www.springframework.org/schema/aop" XSI: SchemaLocation =" http://www.springframework.org/schema/beans HTTP: //www.springframework. орг / схема / бобы / весна-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd " > < боб ID =" studentImpl " класс ="фасоль > < фасоль ID = "studentAcpect" класс = "com.java.test6.StudentServiceAspect" > </ боб > < АОП: конфигурация > < АОП: аспект ID = "studentAcpect" исх = "studentAcpect" > <! - 定义一个切点-> < АОП: срез точек ID = "б" выражение = "исполнение (* com.java.test6 * * (..).) . " > </ АОП: срез точек > <! - 定义前置通知-> < АОП: перед тем методом =»перед тем » Pointcut-исх =„б“> </ АОП: перед тем > <! - 后置通知-> < АОП: после того, как метод = "doAfter" срез точек-исх = "б" > </ АОП: после того, как > <! - 环绕通知-> < АОП: вокруг метода = "doAround" срез точек-исх = "б" /> <! - 返回通知-> < АОП: после возвращения метод = "doAfterReturning" с пересечениями-исх = "B" /> <! - 异常通知-> < АОП:после того, как бросание метода = «doAfterThrowing» срез точки-ссылок= "б" метание = "Ex" /> </ AOP: аспект > </ AOP: конфигурации > </ бобы >
Тестовые категории:
пакет com.java.test6; импорт org.springframework.context.ApplicationContext; импорт org.springframework.context.support.ClassPathXmlApplicationContext; / ** * @author nidegui * @create 2019-06-22 14:47 * / общественного класса Test { публичный статический аннулируются основной (String [] арг) { ApplicationContext ас = новый ClassPathXmlApplicationContext ( "beanss.xml" ); Студенческие люди = (Student) ac.getBean ( "studentImpl" ); people.addStudent ( "zhangsna" ); } }
Консоль вывода журнала:
Статья оттиск: https://www.cnblogs.com/nidegui/p/11072014.html