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:切点表达式