使用XML的方式编写:@Aspect运用

例子、

     接口 
    public interface Calculator {
        // 加
        public int add(int i, int j);

        // 减
        public int sub(int i, int j);

        // 乘
        public int mul(int i, int j);

        //除
      public int div(int i, int j);
    }



     实现   
    public class MyMathCalculator implements Calculator {
        @Override
        public int add(int i, int j) {
            int result = i + j;
            return result;
   }

@Override
public int sub(int i, int j) {
    int result = i - j;
    return result;
}

@Override
public int mul(int i, int j) {
    int result = i * j;
    return result;
}

@Override
public int div(int i, int j) {
    int result = i / j;
    return result;
}
}


      切面、


        
  public class LogUtils {


public static  void logStart(JoinPoint joinPoint){
    //获取到目标方法运行是使用的参数
    Object[] args = joinPoint.getArgs();
    //获取到方法签名
    Signature signature = joinPoint.getSignature();
    String name = signature.getName();
    System.out.println("【"+name+"】方法开始执行,用的参数列表【"+ Arrays.asList(args)+"】");
}


public static void logReturn(JoinPoint joinPoint,Object result){
    System.out.println("【"+joinPoint.getSignature().getName()+"】方法正常执行完成,计算结果是:"+result);
}


public static void logException(JoinPoint joinPoint,Exception exception){
    System.out.println("【"+joinPoint.getSignature().getName()+"】方法执行出现异常了,异常信息是【"+exception+"】:;这个异常已经通知测试小组进行排查");
}


private int logEnd(JoinPoint joinPoint){
    System.out.println("【"+joinPoint.getSignature().getName()+"】方法最终结束了");
    return 0;
}
}


        
   <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   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-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

<!-- 基于注解的AOP步骤;
1、将目标类和切面类都加入到ioc容器中。@Component
2、告诉Spring哪个是切面类。@Aspect
3、在切面类中使用五个通知注解来配置切面中的这些通知方法都何时何地运行
4、开启基于注解的AOP功能
 -->
<!--  开启基于注解的AOP功能;aop名称空间-->

<!--  基于配置的AOP-->
<bean id="myMathCalculator" class="com.apcstudy.aop.impl.MyMathCalculator" />
<bean id="logUtils" class="com.apcstudy.aop.utils.LogUtils" />


<!-- 需要AOP名称空间 -->
<aop:config>
	<aop:pointcut id="mypoint" expression="execution(* com.apcstudy.aop.impl.MyMathCalculator.*(..))"/>
	<!--告诉Spring哪个是切面类。@Aspect-->
	<aop:aspect ref="logUtils">
		<aop:before method="logStart" pointcut-ref="mypoint" />
		<aop:after-returning method="logReturn" pointcut-ref="mypoint" returning="result" />
		<aop:after-throwing method="logException" pointcut-ref="mypoint" throwing="exception" />
		<aop:after method="logEnd" pointcut-ref="mypoint" />
	</aop:aspect>
</aop:config>

<!--注解:快速方便
	配置:功能完善;重要的用配置,不重要的用注解;
  -->

    </beans>
posted @ 2021-04-15 13:30  jock_javaEE  阅读(72)  评论(0编辑  收藏  举报