Spring框架学习笔记(六)Spring Aop学习笔记(基于Xml配置的Aop)

同上一节一样,只不过注解改为了配置文件

同样创建接口类和实体类

接口类

package SpringAopxml;

public interface Userformula {
	
	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);

}

实体类:

不同点没有 注解。

package SpringAopxml;

public class formulaimpl implements Userformula {

	@Override
	public int add(int i, int j) {
		// TODO 自动生成的方法存根
		int result=i+j;
		return result;
	}

	@Override
	public int sub(int i, int j) {
		// TODO 自动生成的方法存根
        int result=i-j;
		return result;	
		}

	@Override
	public int mul(int i, int j) {
		// TODO 自动生成的方法存根
        int result=i*j;
		return result;
	}

	@Override
	public int div(int i, int j) {
		// TODO 自动生成的方法存根
        int result=i/j;
		return result;
	}

}

切面类:

所有的通知方法,没有注解

package SpringAopxml;

import java.util.Arrays;

import org.aspectj.lang.JoinPoint;

public class LoggingAspect {
	
	
	public void beformethod(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 afterreturnning(JoinPoint joinPoint,Object result) {
		String methodName=joinPoint.getSignature().getName();
		System.out.println("The method"+methodName+"result:"+result);
	}
	
	public void afterthrowig(JoinPoint joinPoint,Exception ex) {
		String methodname=joinPoint.getSignature().getName();
		System.out.println("The method"+methodname+"exception:"+ex);
	}
	
	
}

类写完了,开始xml配置:

  1. 创建一个XML文件
  2. 配置 实体bean
<!-- 配置bean -->
   <bean id="userformula" class="SpringAopxml.formulaimpl"></bean>

    3. 配置切面bean  

<!-- 配置切面的bean -->
   <bean id="aspectj" class="SpringAopxml.LoggingAspect"></bean>

    4. 配置Aop 

             4.1  配置切入点

<!-- 配置切点表达式 -->
          <aop:pointcut expression="execution(public int SpringAop.*.*(int, int))" id="pointcut"/>  

               4.2 配置Aop的切面

                   order 可以改变切面的位置

<!-- 配置切面 -->
          <aop:aspect ref="aspectj" order="1">

                4.3  配置通知

前置通知  方法名  切入点
<aop:before method="beformethod" pointcut-ref="pointcut"/>
后置通知  方法名  切入点
<aop:after method="afterMethod" pointcut-ref="pointcut"/>
返回通知  方法名  切入点  返回值
<aop:after-returning method="afterreturnning" pointcut-ref="pointcut" returning="result"/>
异常通知  方法名  切入点  异常信息
<aop:after-throwing method="afterthrowig" pointcut-ref="pointcut" throwing="ex"/>
          

配置完成。

总的xml文件

<?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: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/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
   <!-- 配置bean -->
   <bean id="userformula" class="SpringAopxml.formulaimpl"></bean>
   <!-- 配置切面的bean -->
   <bean id="aspectj" class="SpringAopxml.LoggingAspect"></bean>  
   <!-- 配置AOP -->
   <aop:config>
          <!-- 配置切点表达式 -->
          <aop:pointcut expression="execution(public int SpringAop.*.*(int, int))" id="pointcut"/>            
          <!-- 配置切面 -->
          <aop:aspect ref="aspectj" order="1">        
          <!-- 配置前置通知      需要方法   切入点-->
          <aop:before method="beformethod" pointcut-ref="pointcut"/>
          <aop:after method="afterMethod" pointcut-ref="pointcut"/>
          <aop:after-returning method="afterreturnning" pointcut-ref="pointcut" returning="result"/>
          <aop:after-throwing method="afterthrowig" pointcut-ref="pointcut" throwing="ex"/>      
          </aop:aspect> 
   </aop:config>
</beans>

主函数同注解方式相同。运行结果相同。

Spring框架学习笔记(六)Spring Aop学习笔记(基于Xml配置的Aop)Spring框架学习笔记(六)Spring Aop学习笔记(基于Xml配置的Aop) sdau_20171819 发布了21 篇原创文章 · 获赞 14 · 访问量 7010 私信 关注
上一篇:spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息


下一篇:Spring Boot 中的切面编程,实例场景讲解(日志打印)