Spring的AOP基于AspectJ的注解方式开发3
上上偏博客介绍了@Aspect,@Before
上篇博客介绍了spring的AOP开发的注解通知类型:@Before,@AfterThrowing,@After,@AfterReturning,@Around
也介绍了JoinPoint和ProceedingJoinPoint的区别
这篇博客讲@PointCut的使用,切入点注解----转载自https://www.cnblogs.com/ltfxy/p/9885742.html
这种方法便于维护管理
/** * 切面类:注解的切面类 */ @Aspect public class MyAspectAnno { //切入点的注解 @Pointcut(value="execution(* com.itheima.spring.demo1.OrderDao.find(..))") private void pointcut1(){} @Pointcut(value="execution(* com.itheima.spring.demo1.OrderDao.save(..))") private void pointcut2(){} @Pointcut(value="execution(* com.itheima.spring.demo1.OrderDao.update(..))") private void pointcut3(){} @Pointcut(value="execution(* com.itheima.spring.demo1.OrderDao.delete(..))") private void pointcut4(){} //前置通知 @Before(value="MyAspectAnno.pointcut2()") public void before(){ System.out.println("前置通知======"); } //后置通知 @AfterReturning(value="MyAspectAnno.pointcut4()", returning="result") public void afterReturning(Object result){ System.out.println("后置通知====="+result); } //环绕通知 @Around(value="MyAspectAnno.pointcut3()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable{ System.out.println("环绕前增强====="); Object obj = joinPoint.proceed(); System.out.println("环绕后增强====="); return obj; } //异常抛出通知 @AfterThrowing(value="MyAspectAnno.pointcut1()" , throwing="e") public void find(Throwable e ){ System.out.println("异常抛出通知======"+e.getMessage()); } // 最终通知: @After(value="MyAspectAnno.pointcut1()") public void after( ){ System.out.println("最终通知======"); } }
补充:
当使用接口的时候,spring会自动采用JDK的动态代理
不使用接口的话,spring会自动采用Cglib的动态代理
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步