spring 基于xml文件配置AOP

转载自:https://www.cnblogs.com/ooooevan/p/5823598.html

讲了用注解配置AOP,现在讲用xml怎么配置AOP
其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行。

方法接口


package com.atguigu.spring.aop.impl;

public interface Calculator {

    public int add(int i,int j);
    public int sub(int i,int j);
    public int div(int i,int j);
    public int mul(int i,int j);
}
 

方法实现类


package com.atguigu.spring.aop.impl;

public class CalculatorImpl implements Calculator{

    public int add(int i,int j){
        return i+j;
        };
    public int sub(int i,int j){
        return i-j;
        };
    public int div(int i,int j){
        return i/j;
        };
    public int mul(int i,int j){
        return i*j;
        }
}

日志切面:

package com.atguigu.spring.aop.impl;

import java.util.Arrays;
import java.util.List;

public class LoggingAspect {
       //前置通知日志日志
    public void beforedMethod(JoinPoint joinPoint){
        String methodName=joinPoint.getSignature().getName();
        List<Object> args = Arrays.arrays(joinPoint.getArgs());
        System.out.println("The method "+ methodName +"begins: "+args);
    }
       //返回通知日志
    public void afterReturningMethod(Joinpoint joinpoint,Object result){
        String methodName=joinPoint.getSignature().getName();
        System.out.println("The method "+methodName+" ends with "+result);
    }
      // 异常通知日志
    public void afterThrowingMethod(Joinpoint joinpoint,Exception e){
        String methodName=joinPoint.getSignature().getName();
        System.out.println("The method "+methodName+" occurs excetion "+e);
    }
}

验证切面:

package com.atguigu.spring.aop.impl;

import java.util.Arrays;
import java.util.List;

public class ValidationAspect {
    public void beforedMethod(JoinPoint joinPoint){
        System.out.println("---->Validation: "+ Arrays.aslist(joinPoint.getArgs));
    }
}

main函数

package com.atguigu.spring.aop.impl;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {

        ApplicationContext ctx=new ClassPathXmlApplicationContext("application.xml");
        Calculator cal = (Calculator) ctx.getBean(Calculator.class);
        int result=cal.add(1,2);
        System.out.println("result: "+result);
    }
}

xml配置

<!--先配置要使用的bean和切面bean,让spring容器创建对象-->
<!-- 配置bean -->
<bean id="calculatorimpl" class="com.atguigu.spring.aop.impl.Calculatorimpl"></bean>
<!-- 配置切面的bean -->
<bean id="loggingAspect" class="com.atguigu.spring.aop.impl.LoggingAspect"></bean>
<bean id="validationAspect" class="com.atguigu.spring.aop.impl.ValidationAspect"></bean>

   <!-- 配置AOP ,表示出对象中的逻辑-->
<aop:config>
    <!-- 配置切点表达式 -->
    <aop:pointcut expression="execution(* com.atguigu.spring.aop.impl.CalculatorImpl.*(int, int))" 
    id="pointcut"></aop:pointcut>
    <!-- 配置切面通知 -->
    <aop:aspect ref="validationAspect" order="2">
        <aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before>
    </aop:aspect>
    <!-- 配置切面通知 -->
    <aop:aspect ref="loggingAspect" order="1">
        <!--前置通知  -->
        <aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before>
        <!--返回通知,注意,方法中有多少个参数,这里就要配置多少个参数,参数值和函数中一致-->
        <aop:after-returning method="afterReturningMethod" pointcut-ref="pointcut" returning="result"></aop:after-returning>
        <!--异常通知,注意,方法中有多少个参数,这里就要配置多少个参数,参数值和函数中一致-->
        <aop:after-throwing method="afterThrowingMethod" pointcut-ref="pointcut" throwing="e"></aop:after-throwing>
    </aop:aspect>
</aop:config>

结果和注解配置的一致,但配置比较麻烦,不推荐使用。

猜你喜欢

转载自blog.csdn.net/qq_37774171/article/details/86531234
今日推荐