测试
Spring通知(前置通知,后置通知,返回通知,异常通知,环绕通知)_前置通知后置通知环绕通知-CSDN博客
一、前置通知
--前置通知 : 在方法执行之前执行的通知
--前置通知使用 @Before 注解 , 并将切入点表达式的值作为注解值。
/**
* 声明该方法是一个前置通知:在目标方法开始之前执行
*/
@Before ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public void beforeMethod ( JoinPoint joinPoint ){
System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法,处理" + Arrays . asList ( joinPoint . getArgs ())) ;
}二、后置通知
-- 后置通知是在连接点完成之后执行的 , 即连接点返回结果或者抛出异常的时候 , 下面的后置通知记录了方法的终止
/**
* 在目标方法执行后(无论是否发生异常),执行的通知
* 在后置通知中无法访问目标执行的结果
*/
@After ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public void afterMethod ( JoinPoint joinPoint ){
System . out . println ( "调用" + joinPoint . getSignature () . getName () + "方法结束" ) ;
}三、返回通知
--在返回通知中, 只要将 returning属性添加到 @AfterReturning注解中, 就可以访问连接点的返回值. 该属性的值即为用来传入返回值的参数名称.
--必须在通知方法的签名中添加一个同名参数. 在运行时, Spring AOP 会通过这个参数传递返回值.
--原始的切点表达式需要出现在 pointcut 属性中
/**
* 在方法正常结束的时候执行
* 返回通知可以获取目标方法的返回值
*/
@AfterReturning (value = "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" , returning = "result" )
public void afterReturningMethod ( JoinPoint joinPoint , Override result ){
System . out . println ( "处理结果为:" + result . toString ()) ;
}四、异常通知
--只在连接点抛出异常时才执行异常通知
--将 throwing 属性添加到 @AfterThrowing 注解中, 也可以访问连接点抛出的异常. Throwable是所有错误和异常类的超类. 所以在异常通知方法可以捕获到任何错误和异常.
--如果只对某种特殊的异常类型感兴趣, 可以将参数声明为其他异常的参数类型. 然后通知就只在抛出这个类型及其子类的异常时才被执行.
/**
* 在目标方法出现异常时执行
* 可以访问到方法的异常对象,且可以指定在出现特定异常时在执行通知代码
*/
@AfterThrowing (value = "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" ,throwing = "e" )
public void afterThrowingMethod ( JoinPoint joinPoint , Exception e ){
System . out . println ( joinPoint . getSignature () . getName () + "发生异常:" + e ) ;
}五、环绕通知
--环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点. 甚至可以控制是否执行连接点.
--对于环绕通知来说, 连接点的参数类型必须是 ProceedingJoinPoint. 它是 JoinPoint的子接口, 允许控制何时执行, 是否执行连接点.
--在环绕通知中需要明确调用 ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法. 如果忘记这样做就会导致通知被执行了, 但目标方法没有被执行.
--注意: 环绕通知的方法需要返回目标方法执行之后的结果, 即调用 joinPoint.proceed(); 的返回值, 否则会出现空指针异常
/**
* 环绕方法需要携带ProceedingJoinPoint类型的参数
* 环绕通知类似于动态代理的过程,ProceedingJoinPoint类型的参数可以决定是否执行目标方法
* 且环绕通知必须有返回值,返回值为目标方法的返回值
*/
@Around ( "execution(public int aop.AtithmeticCalculatorImpl.*(int,int))" )
public Object aroundMethod ( ProceedingJoinPoint pjp ){
Object obj = null ;
try {
//前置通知
System . out . println ( "调用" + pjp . getSignature () . getName () + "方法,处理" + Arrays . asList ( pjp . getArgs ())) ;
//执行方法
obj = pjp . proceed () ;
//返回通知
System . out . println ( "处理结果为:" + obj ) ;
} catch ( Throwable e ) {
//异常通知
System . out . println ( pjp . getSignature () . getName () + "发生异常:" + e ) ;
//抛出异常
throw new RuntimeException ( e ) ;
}
//后置通知
System . out . println ( "调用" + pjp . getSignature () . getName () + "方法结束" ) ;
return obj ;
}
【清空弹夹的美国《佛波乐》】 https://www.bilibili.com/video/BV1m2421L76U/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972
【全网首发黑马程序员鸿蒙 HarmonyOS NEXT星河版零基础入门到实战,零基础也能快速入门鸿蒙开发教程】 https://www.bilibili.com/video/BV14t421W7pA/?p=4&share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972
是啊谁不想满身肌肉遇到些小卡拉咪呢 还要担心没收住力道给对方送ICU了 男人不能坏但不能没有肌肉 心有猛虎细嗅蔷薇
太困了,先写个简单笔记 ① 代理模式强调代理类对真正办事儿的类的权限控制能力,装饰器强调对旧对象而不是旧类的功能扩展 ② 代理模式很常见,例如在编程语言级别的 C# Property,js 的 getter和setter...还有nginx做代理服务器 ③ 和中介者模式 访问者模式 有点像
佛波乐指的就是美国的FBI或者联邦调查局的公务人员。
“佛波勒”的说法也是源自于,FBI的前三个字母,用拼音来念的话,就音译为了“佛波勒”。这个词本身是没有什么梗和寓意的,主要就在音译的含义上,一方面是为了搞笑,另外一方面是为了避免视频被屏蔽。
fbl为什么叫佛波乐
因为FBI的前三个字母,用拼音来念的话,音译就是“佛波勒”,这其实是音译梗。 佛波勒是“FBI”在字母拼音中的一种读法。这个词语本身也没有任何的含义,主要就是一种音译
【【b站最全】140学姐,25考研数学全年规划,别瞎复习!|武忠祥张宇汤家凤李永乐】 https://www.bilibili.com/video/BV1Xx421y7Vs/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972
【未明子:弱小的人没有善良邪恶可言,你 不能 预设无产阶级是善良的】 https://www.bilibili.com/video/BV15M4m127LZ/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972
【有手机还需要录音笔吗?科大讯飞智能录音笔SR502体验报告】 https://www.bilibili.com/video/BV15i4y1S7KF/?share_source=copy_web&vd_source=476fcb3b552dae37b7e82015a682a972
现在二次元圈子已经成了很多赛博坤的名利场,她们摇身一变,从靠媚男擦边的网红模特,变成了资深二次元,走起了Cos路线。现在的B站二次元圈子,很多Coser都是之前的网红模特,又或是福利坤洗白上岸后必混的地方,其实也很好理解,与其赚穷哥们的钱不如搭上二刺猿的名头,荤菜素卖狠狠地爆阿宅的钱,这轻松又赚钱的买卖确实吸引人,遥想当年的C圈还是小众文化,但如今竟然成了如此这般的场景,居然还有一群舔狗备胎围着追捧这种货
笔记
webapp
1.创建新项目
1.老王编程
创建了一个文件包
2.spring
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率