面试官问spring,spring面试问题aop使用场景
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。
首先,让我们看一下 Spring Aop中常见的一些评论:
@Before预置通知:目标方法的预执行
@After替换通知:执行目标方法后(持续执行)
@AfterReturning返回后通知:执行方法结束前执行(不执行除外)
@AfterThrowing异常通知:气味异常后执行
@Around环绕通知书:环绕方法的执行
常见问题
1、你肯定知道 Spring , 那说说 Aop 的去全部通知顺序, Spring Boot 或者 Spring Boot 2 对 aop 的执行顺序影响?
告诉我你在AOP中遇到的坑 pits 吗?
示例代码
下面我们先快速构建一个 spring aop 的 demo 程序来一起讨论 spring aop 中的一些细节。
配置文件
为了方便我直接使用 spring-boot 进行快速的项目搭建,大家可以使用 idea 的spring-boot 项目快速创建功能,或者去 start.spring.io进入顶部,快速创建一个弹簧启动应用程序。
因为我经常手贴在互联网上一些依赖性会导致依赖服务启动失败等。
接口类
首先我们需要定义一个接口,这里我们可以回到JDK默认代理实现的选择:
如果目标对象实现接口,默认是使用JDK动态代理
如果目标对象没有实现接口,则使用动态代理
如果目标对象实现接口并强制执行cglib,则使用cglib代理
这块的逻辑在DefaultAopProxyFactory任何有兴趣的人都可以去看看。
实现类
这里我的门只是简单的脱耦操作,可以模拟正常和很容易模拟误差。
aop 拦截器
声明要添加 @Aspect 和 @Component 到当前对象的拦截器,作者已经进入这样的洞穴,仅增加了一个洞穴。
事实上,我一开始并没有真正理解它,但当我看看“视角注释”的定义时,我明白了
这里面根本就没有 Bean 的定义。所以我们还是乖乖的加上两个注解。java面试宝典:https://www.yoodb.com 即将上线,免费刷题。
此外,如果您需要在测试时打开Op支持,请将其添加到配置类@EnableAspectJAutoProxy注解。
事实上,op有三个步骤:
定义视角定义切削
定义切点是我们切点的定义
定义具体的通知, 例如: @After, @Before, 等等.
测试类
其实我这个测试类,虽然用了 @Test 注解,但是我这个类更加像一个 main 方法把:如下所示:
执行结论
结果记录:spring 4.x, spring-boot 1.5.9
现在你不能依靠它,所以你不能测试它
让我得出一个直接的结论:4月份的通告在大多数情况下执行
结果记录:spring 版本5.3.15 springboot 版本2.6.3
多切面的情况
,在多个切削情况下,您可以通过@Order指定订单,数量越小,优先次序越高。
代理失效场景
下面的场景将使aop代理失败,因为当我们执行方法时,它实际上是执行的AServer#a的方法拦截器(MethodInterceptor)链, 当我们在 a 方法内直接执行b(), 其实本质就相当于 this.b() , 这个时候由执行 a方法是调用到 a 的原始对象相当于是 this 调用,这会导致b()方法的代理失败。这个问题也是开发人员在开发过程中遇到的最常见的问题之一。
作者:心城以北
https://juejin.cn/post/7062506923194581029
公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理! 最近,很多人问有读者交换组吗! 加入的方法很简单,公共代码Java选择,回答“添加组”,你就可以加入这个组! Java选择面试问题(WeChat小程序):300+面试问题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题! ------ 特别推荐 ------ 特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注。 如果这篇文章有帮助的话,请看一下并翻译一下!XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com