作者:龙争虎斗石榴agj | 来源:互联网 | 2023-10-10 19:54
实体类如下Calculation是我们用的类,PointCut是我们要实现通知的切面类Calculation类如下packagecom.llf.aop.xml;***@author
实体类如下
Calculation是我们用的类,PointCut是我们要实现通知的切面类
Calculation类如下
package com.llf.aop.xml;
/**
* @author linglongfang
*/
public class Calculation {
public int add(int i,int j){
System.out.println("执行add");
return i+j;
}
public int sub(int i,int j){
System.out.println("执行sub");
return i-j;
}
public int mul(int i,int j){
System.out.println("执行mul");
return i*j;
}
public int div(int i,int j){
System.out.println("执行div");
return i/j;
}
}
PointCut类如下
package com.llf.aop.xml;
import org.aspectj.lang.JoinPoint;
/**
* @author linglongfang
*/
public class PointCut {
public void before(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
System.out.println("执行方法前:"+methodName+"参数为"+args);
}
public void after(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
System.out.println("执行方法后:"+methodName);
}
public void afterReturning(JoinPoint joinPoint,Object result){
String methodName = joinPoint.getSignature().getName();
System.out.println("执行方法返回后:"+methodName+":结果是"+result);
}
public void afterThrowing(JoinPoint joinPoint,Exception ex){
String methodName = joinPoint.getSignature().getName();
System.out.println("执行方法异常后:"+methodName+":抛出"+ex);
}
public Object aroud(ProceedingJoinPoint pjd){
Object result = null;
try {
System.out.println("前置通知");
result = pjd.proceed();
System.out.println("返回通知");
} catch (Throwable throwable) {
throwable.printStackTrace();
System.out.println("异常通知");
}
System.out.println("后置通知");
return result;
}
}
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 id="calculation" class="com.llf.aop.xml.Calculation">bean>
<bean id="pointCut" class="com.llf.aop.xml.PointCut">bean>
<aop:config>
<aop:pointcut id="point" expression="execution(* com.llf.aop.xml.Calculation.*(int, int))"/>
<aop:aspect ref="pointCut" order="1">
<aop:before method="before" pointcut-ref="point">aop:before>
<aop:after method="after" pointcut-ref="point">aop:after>
<aop:after-returning method="afterReturning" returning="result" pointcut-ref="point">aop:after-returning>
<aop:after-throwing method="afterThrowing" throwing="ex" pointcut-ref="point">aop:after-throwing>
aop:aspect>
aop:config>
beans>
测试类Main:
package com.llf.aop.xml;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author linglongfang
*/
public class Main {
public static void main(String[] args){
ApplicationContext ctx = new ClassPathXmlApplicationContext("aop-xml.xml");
Calculation calculation = (Calculation) ctx.getBean("calculation");
calculation.add(2,3);
}
}
测试结果: