Весна: Весна-АОП 简介

Что такое 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

 

рекомендация

отwww.cnblogs.com/nhdlb/p/12446247.html
рекомендация