两个切面类都将切点对准同一个函数,即下面的函数,也是一个按钮事件,我的想法就是找出多个切面同时执行(aspect1比aspect2的优先级高)时的顺序及异常时的情况:
public void btnclickOnAction() { logger.info("HelloworldView ===btnclickOnAction"); System.out.println("btnclickOnAction....."); throw new IllegalArgumentException("自定义的异常消息"); //当所有的通知都存在的情况下,如果throw一个异常,则console中显示出来的顺序: //1:before 2:java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 3:上面btnclickOnAction中显示出来的信息 //4:after 5:afterThrowing 6:Caused by: java.lang.IllegalArgumentException: 自定义的异常消息 //当两个切面都作用于同一个切点(两个都没有@around),原方法正常执行,aspectclass比aspectclass2优先级高,显示如下: // btnclickOnAction AspectClass@Before running..... // btnclickOnAction AspectClass2@Before running..... // 2020-02-03 16:41:51.375 INFO 3740 --- [lication Thread] c.j.j.controller.HelloController : HelloworldView ===btnclickOnAction // btnclickOnAction..... // btnclickOnActionAspectClass2@After running.... // btnclickOnActionAspectClass2@AfterReturning running....目标方法执行的结果=null // btnclickOnActionAspectClass@After running.... // btnclickOnActionAspectClass@AfterReturning running....目标方法执行的结果=null //当两个都还有@around之后,显示如下: // btnclickOnActionAspectClass@Around running.... 高优先级@around调用原方法之前 // btnclickOnAction AspectClass@Before running..... 高优先级的before // btnclickOnActionAspectClass2@Around running.... 低优先级的@around调用原方法之前 // btnclickOnAction AspectClass2@Before running..... 低优先级的before // 2020-02-03 16:55:28.366 INFO 1580 --- [lication Thread] c.j.j.controller.HelloController : HelloworldView ===btnclickOnAction // btnclickOnAction..... // btnclickOnActionAspectClass2@Around running....返回之前=null 低优先级around调用完原有方法准备结束around // btnclickOnActionAspectClass2@After running.... 低优先级after // btnclickOnActionAspectClass2@AfterReturning running....目标方法执行的结果=null 低优先级aftereturning // btnclickOnActionAspectClass@Around running....返回之前=null 高优先级@around调用原方法之后即准备结束高优先级的@around // btnclickOnActionAspectClass@After running....高优先级after // btnclickOnActionAspectClass@AfterReturning running....目标方法执行的结果=null 高优先级afterreturning //还是上面的两个around及其它通知都存在,但目标方法中出现异常: // btnclickOnActionAspectClass@Around running....高优先级around调用原方法之前 // btnclickOnAction AspectClass@Before running.....高优先级before // btnclickOnActionAspectClass2@Around running....低优先级around调用原方法之前 // btnclickOnAction AspectClass2@Before running.....低优先级before // 2020-02-03 17:03:11.896 INFO 7412 --- [lication Thread] c.j.j.controller.HelloController : HelloworldView ===btnclickOnAction // btnclickOnAction..... 上句和这句是原方法中执行时的部分语句,因为中途出现了异常 // btnclickOnActionAspectClass2@After running....虽然出现了异常,但低优先级还是会进入after,只不过不会再进入afterretruning了,当然也不会进入around的执行完原方法后的结束部分 // btnclickOnActionAspectClass2@AfterThrowing running....自定义的异常消息 低优先级进入afterThrowing,表示异常出现了 // btnclickOnActionAspectClass@After running....低优先级虽然出现了异常,但高优先级还是会进入after,当然,类似低优先级一样,也不会进入高优先级的afterreturning // btnclickOnActionAspectClass@AfterThrowing running....自定义的异常消息 低优先级出现了异常,高优先级进入after之后直接进入afterThrowing //如果两个都没有@afterThrowing,原方法中出现了异常,则显示如下: // btnclickOnActionAspectClass@Around running.... // btnclickOnAction AspectClass@Before running..... // btnclickOnActionAspectClass2@Around running.... // btnclickOnAction AspectClass2@Before running..... // 2020-02-03 17:44:28.635 INFO 2716 --- [lication Thread] c.j.j.controller.HelloController : HelloworldView ===btnclickOnAction // btnclickOnAction..... // btnclickOnActionAspectClass2@After running.... 低优先级的@around的原方法执行完之后的结束部分也没有执行,只执行After // btnclickOnActionAspectClass@After running.... // 。。。。。java.lang.reflect.InvocationTargetException // Caused by: java.lang.IllegalArgumentException: 自定义的异常消息 //上面异常程序,虽然没有@afterThrowing,但程序并没有闪退,即使做成JAR包程序之后执行的时候也是出现异常信息但程序并没有退出 //难道说 Controller中的异常不会让程序退出吗?我猜想:事件中异常才不会退出,其它地方异常应该退出吧???实验:在构造函数中throw 异常则程序退出 //由此可以说明,只是在事件中的异常并不会让程序退出 // JnaDemo jnaDemo = new JnaDemo(); //// jnaDemo.printf("%s", new String[]{"hello jna in bnclick\r\n"}); //它会出现在@After之后才显示,???? // // try { // jnaDemo.msgfun(); // } catch (InterruptedException e) { // e.printStackTrace(); // } // JavafxSpringbootPomApplication.showView(SecondView.class, Modality.NONE); }
来源:oschina
链接:https://my.oschina.net/u/2963604/blog/3162973