/**
* 1.导入AOP的依赖: spring-aspects包
* 2.定义一个页面逻辑类
* 3.定义一个切面类
* 4.将切面类和业务逻辑类加入到spring容器
* 5.为了区分哪个类是切面类,给切面类加@Aspect注解
* 6.开启注解版的事务@EnableAspectJAutoProxy
*
*/
@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
@Bean
public MathCalculator mathCalculator(){
return new MathCalculator();
}
@Bean
public LogAspects logAspects(){
return new LogAspects();
}
}
//业务类
public class MathCalculator {
public int div(int i,int j){
return i/j;
}
}
//切面类
@Aspect
public class LogAspects {
//抽取公共的接入点表达式
@Pointcut("execution(public int com.mytest.AOP.MathCalculator.*(..))")
public void pointCut(){
}
//内部的点入店直接用方法名,
@Before("pointCut()")
public void logStart(JoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
System.out.println(joinPoint.getSignature().getName()+"运行。。。参数列表是:{}"+ Arrays.asList(args));
}
@After("com.mytest.AOP.LogAspects.pointCut()")
public void logEnd(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName()+"除法结束。。。");
}
//returning="result“,result对应方法的参数result,JoinPoint必须出现在方法参数列表的最前面
@AfterReturning(value = "pointCut()",returning = "result")
public void logReturn(JoinPoint joinPoint,Object result) {
System.out.println("除法正常返回。。。运行结果{}"+result);
}
@AfterThrowing(value = "pointCut()",throwing = "e")
public void logException(JoinPoint joinPoint,Exception e) {
System.out.println("除法异常、、、异常信息:{}"+e);
}
}
//测试类
public class TestAop {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(MainConfigOfAOP.class);
MathCalculator math= context.getBean(MathCalculator.class);
System.out.println(math.div(10, 3));
}
}
运行结果:

该博客介绍了如何在Spring中配置和使用AOP(面向切面编程)来实现方法运行日志的记录。通过创建切面类,定义切入点表达式,以及使用Before、After、AfterReturning和AfterThrowing注解,博主详细展示了如何在方法调用前后插入日志打印,包括方法参数、执行结果和异常处理情况。示例代码中包含了配置类、业务逻辑类和切面类的实现。
1011

被折叠的 条评论
为什么被折叠?



