<?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:context="http://www.springframework.org/schema/context"
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/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<context:component-scan base-package="zhang.spring.apo.beans"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- 在xml中配置bean -->
<bean id="mathtoolsImpl"
class="zhang.spring.apo.xml.beans.MathtoolsImpl"></bean>
<!-- 配置切面日志的bean-->
<bean id="logginAspect"
class="zhang.spring.apo.xml.beans.Aspect.LogginAspect"></bean>
<!-- 配置验证切面的bean -->
<bean id="vaildationAspect"
class="zhang.spring.apo.xml.beans.Aspect.VaildationAspect"></bean>
<!-- 配置切面 -->
<aop:config>
<aop:pointcut expression="execution(* zhang.spring.apo.beans.MathtoolsImpl.*(..))" id="pointcut"/>
<aop:aspect ref="logginAspect" order="2">
<aop:before method="methodBefore" pointcut-ref="pointcut"/>
<aop:after method="methodAfter" pointcut-ref="pointcut"/>
<aop:after-returning method="methodReturning" pointcut-ref="pointcut" returning="result" />
<aop:after-throwing method="methodException" pointcut-ref="pointcut" throwing="e"/>
</aop:aspect>
<aop:aspect ref="vaildationAspect" order="1">
<aop:before method="vaildationBefore" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>
package zhang.spring.apo.xml.beans.Aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
public class LogginAspect {
@Pointcut("execution(* zhang.spring.apo.beans.MathtoolsImpl.*(..))")
public void decare(){}
public void methodBefore(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();
Object args=joinPoint.getArgs();
System.out.println("方法:"+methodName+",前置通知");
}
public void methodAfter(JoinPoint joinPoint){
String methodName=joinPoint.getSignature().getName();
Object args=joinPoint.getArgs();
System.out.println("方法:"+methodName+",返回通知");
}
public void methodReturning(JoinPoint joinPoint,Object result){
String methodName=joinPoint.getSignature().getName();
System.out.println("方法:"+methodName+",结果通知,结果:"+result);
}
public void methodException(JoinPoint joinPoint,Exception e){
String methodName=joinPoint.getSignature().getName();
System.out.println("方法:"+methodName+",异常通知,exception:"+e);
}
/**
@Around(value="execution(* zhang.spring.apo.beans.MathtoolsImpl.*(..))")
public Object MethodArounding(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
try {
System.out.println("before");
proceedingJoinPoint.proceed();
System.out.println("return");
} catch (Exception e) {
System.out.println("error");
}
System.out.println("after");
return 0;
}**/
}
package zhang.spring.apo.xml.beans.Aspect;
import org.aspectj.lang.annotation.Pointcut;
public class VaildationAspect {
@Pointcut("execution(* zhang.spring.apo.beans.MathtoolsImpl.*(..))")
public void decare(){}
public void vaildationBefore(){
System.out.println("vaildation before---->");
}
}
package zhang.spring.apo.beans;
public interface Mathtools {
int add(int i,int j);
int reduce(int i,int j);
int cheng(int i,int j);
int div(int i,int j);
}
package zhang.spring.apo.beans;
import org.springframework.stereotype.Component;
@Component("mathtools")
public class MathtoolsImpl implements Mathtools {
@Override
public int add(int i, int j) {
int result=i+j;
System.out.println("add....");
return result;
}
@Override
public int reduce(int i, int j) {
int result=i-j;
return result;
}
@Override
public int cheng(int i, int j) {
int result=i*j;
return result;
}
@Override
public int div(int i, int j) {
int result=i/j;
System.out.println("result="+"div :"+i+"/"+j);
return result;
}
}