zoukankan      html  css  js  c++  java
  • 7.spring:SpringAOP(配置文件)

    SpringAOP(xml文件配置)

     配置文件的方式,主要是在xml文件中进行配置,不使用注解!

     目录:

     

    AtithmeticCalculator.java
    public interface AtithmeticCalculator {
        int add(int i,int j);
        int sub(int i,int j);
        int mul(int i,int j);
        int div(int i,int j);
    }
    AtithmeticCalculatorImp1.java
    @Component
    public class AtithmeticCalculatorImp1 implements AtithmeticCalculator{
        public int add(int i, int j) {
            int res = i + j;
            return res;
        }
        public int sub(int i, int j) {
            int res = i - j;
            return res;
        }
        public int mul(int i, int j) {
            int res = i * j;
            return res;
        }
        public int div(int i, int j) {
            int res = i / j;
            return res;
        }
    }
    LoggionAspect.java
    public class LoggionAspect {
        public void beforeMethod(JoinPoint joinPoint){
            String methodName = joinPoint.getSignature().getName();
            Object [] args = joinPoint.getArgs();
            System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
        }
        public void afterMethod(JoinPoint joinPoint){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " ends");
        }
        public void afterReturning(JoinPoint joinPoint, Object result){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " ends with " + result);
        }
        public void afterThrowing(JoinPoint joinPoint, Exception e){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " occurs excetion:" + e);
        }
    }
    LoggionAspect2.java
    public class LoggionAspect2 {
        public void beforeMethod1(JoinPoint joinPoint){
          System.out.println("--->beforeMethod1");
          String methodName = joinPoint.getSignature().getName();
          Object [] args = joinPoint.getArgs();
          System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
          System.out.println("--->beforeMethod1");
        }
        
        public void afterMethod1(JoinPoint joinPoint){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " ends");
        }
        
        public void afterReturning1(JoinPoint joinPoint, Object result){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " ends with " + result);
        }
        public void afterThrowing1(JoinPoint joinPoint, Exception e){
            String methodName = joinPoint.getSignature().getName();
            System.out.println("The method " + methodName + " occurs excetion:" + e);
        }
        

    applicationContext.xml

    <!-- 配置bean -->
    <bean id="atithmeticCalculator" class="com.MrChengsc.AOP.xml.AtithmeticCalculatorImp1"></bean>
    
    <!-- 配置切面的Bean -->
    <bean id="loggionAspect" class="com.MrChengsc.AOP.xml.LoggionAspect"></bean>
    <bean id="loggionAspect2" class="com.MrChengsc.AOP.xml.LoggionAspect2"></bean>
    
    <!-- 配置AOP -->
    <aop:config>
        <!-- 配置切点 表达式-->
        <aop:pointcut expression="execution(* com.MrChengsc.AOP.xml.AtithmeticCalculator.*(int, int))" id="pointcut"/>
        
        <!-- 配置切面及通知 -->
        <aop:aspect  ref="loggionAspect2" order="2">
            <aop:before method="beforeMethod1" pointcut-ref="pointcut"/>
        </aop:aspect>
        <aop:aspect  ref="loggionAspect" order="1">
            <aop:before method="beforeMethod" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>

    main

        public static void main(String[] args) {
    //        AtithmeticCalculator atithmeticCalculator = null;
    //        atithmeticCalculator = new AtithmeticCalculatorImp();
    //        
    //        atithmeticCalculator.add(1, 3);
    //        System.out.println("---");
    //        atithmeticCalculator.sub(3, 1);
    //        System.out.println("---");
    //        atithmeticCalculator.mul(1, 3);
    //        System.out.println("---");
    //        atithmeticCalculator.div(10, 2);
    //        System.out.println("---");
            
            
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            //强制的类型使用接口的类型
            AtithmeticCalculator atithmeticCalculator = (AtithmeticCalculator) ctx.getBean(AtithmeticCalculator.class);
            
            int res = atithmeticCalculator.add(3, 6);
            System.out.println("res:" + res);
            System.out.println("-----");
    //        int res1 = atithmeticCalculator.mul(2, 3);
    //        System.out.println("res1:" + res1);
            
            //异常代码的测试
    //        int res2 = atithmeticCalculator.div(10, 0);
    //        System.out.println("res2:" + res2);
        }
    The method add begins with [3, 6]
    --->beforeMethod1
    The method add begins with [3, 6]
    --->beforeMethod1
    res:9
    -----

    注:

    1.配置bean,实现aop的类

    2.配置切面的bean

    3.配置aop需要使用<aop:config>标签

    4.使用<aop:pointcut expression="execution(* com.MrChengsc.AOP.xml.AtithmeticCalculator.*(int, int))" id="pointcut"/>

      配置切点表达式

      *:代表任意的

      两个int:可以使用   ..  进行替换

    5.配置切面以及通知使用<aop:aspect>

      ref:引用已配置的切面类bean

      order:切面的优先级(数值越小优先级越大)

    6.标签:

    <aop:before method="beforeMethod" pointcut-ref="pointcut"/> :前置通知
    <aop:after method=""/>:后置通知
    <aop:after-returning method="" returning="" pointcut="">:执行成功拿返回值
    <aop:around method=""/>:环绕通知
    <aop:after-throwing method="" >:异常通知

    属性:

     pointcut-ref:引用切点表达式

     method:切面类中的方法

    returning:接受返回值

    pointcut:切点表达式

  • 相关阅读:
    k8s官网 基础知识入门教程
    Mac安装minikube
    docker下创建crontab定时任务失败
    docker save提示no space left on device错误
    cx_Oracle读写clob
    Ossec添加Agent端流程总结
    ossec变更alert等级及配置邮件预警
    linux安全配置检查脚本_v0.5
    linux命令返回值的妙用
    Shell脚本判断内容为None的方式
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10093698.html
Copyright © 2011-2022 走看看