接口express
public interface Calculator { int add(int i,int j); int sub(int i,int j); int div(int i,int j); }
接口實現app
public class CalculatorImpl implements Calculator{ @Override public int add(int i, int j) { int result = i+j; return result; } @Override public int sub(int i, int j) { int result = i-j; return result; } @Override public int div(int i, int j) { int result = i/j; return result; } }
日誌切面ide
public class LoggingAspect { //環繞通知 public Object Around(ProceedingJoinPoint proceedingJoinPoint){ Object result = null; String methodName = proceedingJoinPoint.getSignature().getName(); try { //前置通知 System.out.println("The method"+methodName+"begin with:"+Arrays.asList(proceedingJoinPoint.getArgs())); result = proceedingJoinPoint.proceed(); //返回通知 System.out.println("The method" + methodName + "end with:"+result); } catch (Throwable e) { //異常通知 System.out.println("The method" + methodName + "occurs exception:"+e); } //後置通知 System.out.println("The method" + methodName + "end "); return result; } }
驗證切面日誌
public class Validation { public void validateArgs(JoinPoint joinPoint) { System.out.println("validate:"+Arrays.asList(joinPoint.getArgs())); } }
main方法code
public class Main { @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Calculator calculator = (Calculator) ctx.getBean("calculator"); int result = calculator.add(1, 2); System.out.println(result); } }
xml配置文件(重點)xml
<!-- 配置bean --> <bean id="calculator" class="com.test.aop.impl.CalculatorImpl"></bean> <!-- 配置切面的bean --> <bean id="loggingAspect" class="com.test.aop.impl.LoggingAspect"></bean> <bean id="validation" class="com.test.aop.impl.Validation"></bean> <!-- 配置AOP --> <aop:config> <!-- 配置切點表達式 --> <aop:pointcut expression="execution(* com.test.aop.impl.Calculator.*(int,int))" id="pointcut"/> <!-- 配置切面及通知 --> <aop:aspect ref="loggingAspect" order="2"> <aop:around method="Around" pointcut-ref="pointcut"/> </aop:aspect> <aop:aspect ref="validation" order="1"> <aop:before method="validateArgs" pointcut-ref="pointcut"/> </aop:aspect> </aop:config>