• spring通知的注解



    1、代理类接口Person.java

     1 package com.xiaostudy;
     2 
     3 /**
     4  * @desc 被代理类接口
     5  * 
     6  * @author xiaostudy
     7  *
     8  */
     9 public interface Person {
    10 
    11     public void add();
    12     public void update();
    13     public void delete();
    14 }

    2、代理类PersonImple.java

     1 package com.xiaostudy;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 /**
     6  * @desc 被代理类
     7  * 
     8  * @author xiaostudy
     9  *
    10  */
    11 @Component("person")//类注解
    12 public class PersonImple implements Person {
    13 
    14     /**
    15      * @desc 实现接口方法
    16      */
    17     public void add() {
    18         System.out.println("add().....");
    19     }
    20 
    21     @Override
    22     public void update() {
    23         System.out.println("update().....");
    24 //        int i = 1/0;
    25     }
    26 
    27     @Override
    28     public void delete() {
    29         System.out.println("delete().....");
    30     }
    31     
    32 }

    3、通知类MyAspectJ.java

     1 package com.xiaostudy;
     2 
     3 import org.aspectj.lang.JoinPoint;
     4 import org.aspectj.lang.ProceedingJoinPoint;
     5 import org.aspectj.lang.annotation.After;
     6 import org.aspectj.lang.annotation.AfterReturning;
     7 import org.aspectj.lang.annotation.AfterThrowing;
     8 import org.aspectj.lang.annotation.Around;
     9 import org.aspectj.lang.annotation.Aspect;
    10 import org.aspectj.lang.annotation.Before;
    11 import org.aspectj.lang.annotation.Pointcut;
    12 import org.springframework.stereotype.Component;
    13 
    14 /**
    15  * @desc 通知类
    16  * 
    17  * @author xiaostudy
    18  *
    19  */
    20 @Component//类注解
    21 @Aspect//AspectJ注解
    22 public class MyAspectJ {
    23     
    24     //声明公共切入点
    25     @Pointcut("execution(* com.xiaostudy.PersonImple.*(..))")
    26     public void myPointcut() {
    27         
    28     }
    29     
    30     //前置通知注解,只有一个参数时,value可以省略不写
    31     @Before("execution(* com.xiaostudy.PersonImple.*(..))")
    32     public void myBefort(JoinPoint joinPoint) {
    33         System.out.println("前置通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName());
    34     }
    35     
    36     //后置通知注解,当参数大于1时,value必须写
    37     @AfterReturning(value="myPointcut()", returning="ret")
    38     public void myAfterReturning(JoinPoint joinPoint, Object ret) {
    39         System.out.println("后置通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName()
    40                 + ", ret: " + ret);
    41     }
    42     
    43     //环绕通知注解
    44     @Around("myPointcut()")
    45     public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable {
    46         System.out.println("环绕通知====前>>>>>>>>>>>");
    47         Object obj = joinPoint.proceed();
    48         System.out.println("环绕通知====后<<<<<<<<<<<");
    49         return obj;
    50     }
    51     
    52     //异常通知注解
    53     @AfterThrowing(value="myPointcut()", throwing="e")
    54     public void myThrowint(JoinPoint joinPoint, Throwable e) {
    55         System.out.println("异常通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName()
    56                 + ", e: " + e.getMessage());
    57         System.exit(0);
    58     }
    59     
    60     //最终通知注解
    61     @After("myPointcut()")
    62     public void myAfter(JoinPoint joinPoint) {
    63         System.out.println("最终通知>>>>>>>>>joinPoint: " + joinPoint.getSignature().getName());
    64     }
    65 }

    4、spring配置文件applicationContext.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xmlns:context="http://www.springframework.org/schema/context"
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans 
     7                               http://www.springframework.org/schema/beans/spring-beans.xsd
     8                               http://www.springframework.org/schema/aop 
     9                               http://www.springframework.org/schema/aop/spring-aop.xsd
    10                               http://www.springframework.org/schema/context 
    11                               http://www.springframework.org/schema/context/spring-context.xsd">
    12     <!-- 扫描注解类 -->
    13     <context:component-scan base-package="com.xiaostudy"></context:component-scan>
    14     <!-- 确定 AOP注解生效 -->
    15     <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    16 </beans>

    5、测试类Test.java

     1 package com.xiaostudy;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 /**
     7  * @desc 测试类
     8  * 
     9  * @author xiaostudy
    10  *
    11  */
    12 public class Test {
    13 
    14     public static void main(String[] args) {
    15         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    16         Person person = ac.getBean("person", Person.class);
    17         person.add();
    18         person.update();
    19         person.delete();
    20     }
    21 
    22 }

  • 相关阅读:
    webpack的最简单应用,只使用js与css的打包
    数据统计表插件,highcharts插件的简单应用
    C#中的特性 (Attribute) 入门 (二)
    C#中的特性 (Attribute) 入门 (一)
    SQLServer存储过程入门
    C#拖拽操作
    C#剪切板
    .Net中的IO
    Android四大组件-服务
    AlertDialog对话框
  • 原文地址:https://www.cnblogs.com/xiaostudy/p/9535947.html
Copyright © 2020-2023  润新知