目的
主要是用这个样例代码做DEBUG,为分析Spring AOP 源码做准备。
配置类
@Configuration
@ComponentScan("example.spring.aop")
@EnableAspectJAutoProxy
public class AopConfig {
@Bean
public Calculator calculator(){
return new Calculator();
}
}
切面类
@Component
@Aspect
public class LogAspects {
@Pointcut("execution(public int example.spring.aop.Calculator.*(..))")
public void pointCut() {}
@Before("pointCut()")
public void logStart(JoinPoint joinPoint){
System.out.println("参数列表:" + Arrays.asList(joinPoint.getArgs()));
}
@After("pointCut()")
public void logEnd(JoinPoint joinPoint){
System.out.println("结束方法:" + joinPoint.getSignature().getName());
}
@AfterReturning(value="pointCut()",returning="result")
public void logReturn(JoinPoint joinPoint,Object result){
System.out.println("运行结果是: " + result);
}
@AfterThrowing(value="pointCut()",throwing="exception")
public void logException(JoinPoint joinPoint,Exception exception){
System.out.println("异常信息是:" + exception.getMessage());
}
}
目标类
public class Calculator {
public int div(int i, int j){
return i/j;
}
}
Main 方法
public class AopApplicationContext {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AopConfig.class);
Calculator c = ctx.getBean(Calculator.class);
int result = c.div(4, 3);
System.out.println(result);
ctx.close();
}
}
运行结果
参数列表:[4, 3]
结束方法:div
运行结果是: 1
1