spring切面Aspects

spring切面Aspects,第1张

导入aop模块:spring-aspects

xml实现: 开启基于注解版的切面功能<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

1.通知方法

    1.1 前置通知@Before

    1.2 后置通知@After(目标方法运行结束后执行,【正常结束或异常结束都调用】)

    1.3 返回通知@AfterReturning (目标方法正常返回后执行)

    1.4 异常通知@AfterThrowing

    1.5 环绕通知@Around (动态代理 ,手动推进目标方法运行[joinPoint.proceed])

2.定义业务逻辑类,在运行时执行通知方法

3.定义日志切面类,里面方法要动态感知逻辑类方法(给切面类方法标注何时何地运行通知方法)

4.将切面类和逻辑类都加入到容器,切面类加@Aspect注解

5.在配置类加@EnableAspectJAutoProxy开启基于注解版的切面功能

使用切面总结:

    1.将业务逻辑组件和切面类都加在容器中,告诉spring哪个是切面类@Aspect

    2.在切面类上每一个通知方法上标注通知注解,告诉Spring什么时候运行

    3.开启aop模式@EnableAspectJAutoProxy

需求:在不停止服务的情况下,通过上传一个jar包然后捕获某方法的异常进行处理

思路:

使用springaop实现

至于为什么要定义一个切入点到service包下面的所以方法,感兴趣的可以研究一下springAop的源码,里面有个postProcessBeforeInstantiation方法,会返回代理对象,如果没有则不会返回代理对象。

当然还有一种思路,就是在动态添加切入点的时候把spring容器中的对象替换成自己的代理对象(没有实验过,在非单例模式的时候有问题,这里不深入研究)。

引入aop的starter:

第一步:

第二步:

jar包怎么写?只需要实现对应的切面方法就行了

通常有方法前拦截,方法后拦截,以及异常拦截。通过在这些拦截中编写自己的业务处理,可以达到特定的需求。

execution表达式

20200401:添加注入applicationContext到jar里面

https://github.com/cdInit/aopHotPlugin


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11178707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存