zoukankan      html  css  js  c++  java
  • Spring阶段性学习总结(十 一)Aspect实现各种通知

    1 package SpringAopImp;
    2 
    3 public interface Calculator {
    4     int add(int i, int j);
    5     int sub(int i, int j);
    6     int mul(int i, int j);
    7     int div(int i, int j);
    8 }
     1 package SpringAopImp;
     2 
     3 
     4 import org.springframework.stereotype.Component;
     5 
     6 @Component
     7 public class CalculatorImp  implements Calculator {
     8        
     9     @Override
    10     public int add(int i, int j) {
    11         int result=i+j;
    12         System.out.println("Method is Running");
    13         return result;
    14     }
    15 
    16     @Override
    17     public int sub(int i, int j) {
    18         int result=i-j;
    19         return result;
    20     }
    21 
    22     @Override
    23     public int mul(int i, int j) {
    24         int result=i*j;
    25         return result;
    26     }
    27 
    28     @Override
    29     public int div(int i, int j) {
    30         int result=i/j;
    31         return result;
    32     }
    33 }
     1 package SpringAopImp;
     2 
     3 import org.aspectj.lang.JoinPoint;
     4 import org.aspectj.lang.annotation.*;
     5 import org.springframework.stereotype.Component;
     6 
     7 import java.util.Arrays;
     8 import java.util.List;
     9 
    10 //把这个类声明为一个切面:1、把该类放入到IOC容器中
    11 
    12 @Component
    13 @Aspect
    14 public class LoggingAspect {
    15 
    16     //前置通知在目标方法开始前执行
    17     @Before("execution(public int SpringAopImp.CalculatorImp.add(int ,int))")
    18     public void beforeMethod(JoinPoint joinPoint) {
    19         String methodName = joinPoint.getSignature().getName();
    20         List<Object> args = Arrays.asList(joinPoint.getArgs());
    21         System.out.println("The Method:" + methodName + " beginWith:" + args);
    22     }
    23 
    24     //后置通知,在目标方法开始后执行,无论方法是否发生异常
    25     @After("execution(public int SpringAopImp.CalculatorImp.add(int ,int))")
    26     public void afterMethod(JoinPoint joinPoint) {
    27         String methodName = joinPoint.getSignature().getName();
    28         System.out.println("The Method:" + methodName + " ends");
    29     }
    30 
    31     //返回通知,在目标方法正常结束后执行的代码,返回通知是可以返回方法的返回值的
    32     @AfterReturning(value = "execution(public int SpringAopImp.CalculatorImp.add(int ,int))", returning = "result")
    33     public void afterReturning(JoinPoint joinPoint, Object result) {
    34         String methodName = joinPoint.getSignature().getName();
    35         System.out.println("The Method:" + methodName + " endsWith:" + result);
    36     }
    37 
    38     /*
    39      * 异常通知,在目标方法出现异常的时候,调用代码
    40      * 可以访问异常对象;且可以指定在出现特定异常时在执行通知代码
    41      * */
    42     @AfterThrowing(value = "execution(public int SpringAopImp.CalculatorImp.add(int ,int))", throwing = "ex")
    43     public void afterThrowing(JoinPoint joinPoint, Exception ex) {
    44         String methodName = joinPoint.getSignature().getName();
    45         System.out.println("The Method :" + methodName + "has Exception: " + ex);
    46     }
    47 
    48 }
     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:context="http://www.springframework.org/schema/context"
     5        xmlns:aop="http://www.springframework.org/schema/aop"
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
     7 
     8         <context:component-scan base-package="SpringAopImp"></context:component-scan>
     9         <!--使 AspectJ注解起作用  :自动为匹配的类生成代理对象-->
    10       <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    11 </beans>
     1 package SpringAopImp;
     2 
     3 import org.springframework.context.support.ClassPathXmlApplicationContext;
     4 
     5 public class Main {
     6     public static void main(String[] args) {
     7         ClassPathXmlApplicationContext ctx= new ClassPathXmlApplicationContext("SpringAopImp/SpringAopImp.xml");
     8         Calculator calculatorImp = (Calculator) ctx.getBean("calculatorImp");
     9         System.out.println(calculatorImp.getClass().getName());
    10         System.out.println(calculatorImp.add(1,3));
    11     }
    12 }
  • 相关阅读:
    top命令
    MySQL基准测试(三)--开源工具与实例演示
    MySQLdump之single-transaction详解
    牛刀小试MySQL--日志文件
    MySQL基准测试(二)--方法
    MySQL基准测试(一)--原因,策略,思路
    MySQL实验准备(二)--Python模拟数据(MySQL数据库)
    MySQL实验准备(一)--环境准备
    InnoDB存储引擎概览
    单机多实例mysq 8.0l部署安装
  • 原文地址:https://www.cnblogs.com/zhang188660586/p/11583590.html
Copyright © 2011-2022 走看看