写点什么

Srping 全注解开发 ---AOP 模块,教科书般的排查与分析过程

用户头像
极客good
关注
发布于: 刚刚

AOP 模块




[](


)回顾五个通知注解


=======================================================================





[](


)使用演示


===================================================================


[](


)1.切面类(@Aspect)




@Aspect//表明是一个切面类


public class MyAspect


{


//抽取公共的切入点表达式


//1.本类引用:直接写方法名()


//2.其他切面引用:方法的全类名()


@Pointcut("execution(public int com.math.calculator.*(..))")


public void point(){};


//在目标方法之前切入,切入点表达式(指定切入哪个方法)


//本类方法引用切点表达式演示:


@Before("point()")


public void logStart()


{


System.out.println("目标方法运行前...");


}


//外部方法引用切点表达式演示:


@After("com.aop.MyAspect.point()")


public void logAfter()


{


System.out.println("目标方法结束后...");


}


@AfterReturning("point()")


public void logReturning()


{


System.out.println("目标方法正常返回后...");


}


@AfterThrowing("point()")


public void logThrowing()


{


System.out.println("目标方法出现异常后...");


}


}




[](


)业务逻辑类




//计算器类


public class calculator


{


public int add(int i,int j)


{


return i+j;


}


}




[](


)在配置类中将切面类和业务逻辑类都加入到容器中



[](

)切记给配置类上加上 @EnableAspectJAutoProxy,开启基于注解的 aop 模式


@EnableAspectJAutoProxy


@Configuration


public class MyConfig


{


@Bean


public MyAspect myAspect()


{


return new MyAspect();


}


@Bean


public calculator calculator()


{


return new calculator();


}


}




[](


)测试




public class Main


{


//传入的是配置类的位置,一开始是加载配置类,之前是加载配置文件的位置


private static AnnotationConfigApplicationContext ioc= new AnnotationConfigApplicationContext(MyConfig.class);


public static void main(String[] args)


{


calculator bean = ioc.getBean(calculator.class);


System.out.println(bean.add(1,2));


}


}




[](

)注意:spring 中很多 Enablexxx 都是开启某一项功能




[](


)在切面类的方法中获取切入方法的相关信息



[](

)joinpoint 必须出现在方法参数的首位


@Aspect//表明是一个切面类


public class MyAspect


{


//抽取公共的切入点表达式


//1.本类引用:直接写方法名()


//2.其他切面引用:方法的全类名()


@Pointcut("execution(public int com.math.calculator.*(..))")


public void point(){};


//在目标方法之前切入,切入点表达式(指定切入哪个方法)


//本类方法引用切点表达式演示:


@Before("point()")


public void logStart(JoinPoint joinPoint)


{


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


System.out.println("目标方法运行前 "+"方法名:"+joinPoint.getSignature().getName());


}


//外部方法引用切点表达式演示:


@After("com.aop.MyAspect.point()")


public void logAfter()


{


System.out.println("目标方法结束后...");


}


//joinpoint 必须出现在方法参数的首位


@AfterReturning(value = "point()",returning = "res")


public void logReturning(JoinPoint js,Object res)


{


System.out.println(js.getSignature().getName()+"方法正常返回后 "+"方法返回值:"+res);


}


//joinpoint 必须出现在方法参数的首位


@AfterThrowing(value = "point()",throwing = "ex")


public void logThrowing(JoinPoint js,Exception ex)


{


System.out.println(js.getSignature().getName()+"方法出现异常后 "+"异常是:"+ex);


}


}



用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Srping全注解开发---AOP模块,教科书般的排查与分析过程