【第164期】围绕Spring AOP可以问哪些面试问题?

2023-10-04 10:37
2022年5月17日下午3:54 • 面试问题 • 阅读 5 点击上方“Java面试题精选”,关注公众号 面试时画图,查漏补缺 >>番外:往期面试题,10个为单位放在这个公众号菜单栏->面试题,有需要的欢迎阅读 阶段总结合集:001至150期总结,方便阅读,持续更新... 1、面试官问:什么是AOP? 与面向切面的OOP相比,传统OOP开发中的代码逻辑是自上而下的,这会造成一些横切问题。这些横切问题与我们主要业务逻辑的关系不会分散在代码的每一部分。的地方,造成维护困难。 AOP的编程思想就是将业务逻辑和横切问题分离,达到解耦的目的,让代码可复用,开发高效(目的是复用代码,抽取公共代码) 2、面试官问:AOP的应用场景有哪些? 1. 日志记录 2. 权限验证 3.效率检查(代码方面,我喜欢用注解+切面的方式来实现验证、Redis分布式锁等功能) 4.事务管理(spring事务是使用AOP实现的) 3、面试官问:springAop底层是如何实现的? (此时我条件反射地想到了这两点) 1.JDK动态代理 2.CGLIB代理 面试官问:编织是在编译时完成还是运行时完成? 在运行时,字节码被生成并加载到虚拟机中。 JDK采用反射原理,CGLIB采用ASM原理。 面试官又问:是初始化的时候编织的还是获取对象的时候编织的? 初始化时,目标对象已经被代理并放入spring容器中。 面试官又问:spring AOP默认使用jdk动态代理还是cglib? 这取决于条件。如果类实现了接口,则使用jdk。如果接口没有实现,则使用cglib。 (尴尬地笑了笑,忘记了一点,内心泪流满面) 4、面试官问:spring AOP和AspectJ有什么关系? 1. 两者都是为了实现AOP目的而出现的技术。 Spring AOP 指的是 AspectJ 编程风格。 这里有一个故事,Spring AOP早期使用的编程风格使用起来非常不方便,而且难以理解。后来spring aop开始采用Aspectj编程风格进行编程。这里有一个小彩蛋(如果你知道,请跳过),构建一个使用spring,但不使用xml文件的项目,并且将bean注入到容器中并可以从容器中取出。 第一步:添加spring-context依赖 /** * * Aspect * 必须由spring管理 */@Component@Aspectpublic class VingAspectJ { /** * 切入点 * 为什么应该在方法上声明切入点?目的只是为了在上面写注解 * Pointcut 是连接点的集合(也就是方法的集合) */ @Pointcut("execution(* com.ving.dao.*.*(..))" )公共无效切点(){ } /** * 通知---》配置切点 */ @After("com.ving.config.VingAspectJ.pointCut()") public void after(){ System.out.println("after"); } @Before("com.ving.config.VingAspectJ.pointCut()") public void before(){ System.out.println("before"); }} 来源:m.genealogy-computer-tips.com/vingLiu/p/12052096.html 而不是在网上搜索问题?还不赶快关注我们吧~ 版权声明:本文内容由网友自愿贡献,本文所表达的观点仅代表作者自己的观点。本网站仅提供信息存储空间服务,不拥有任何所有权,也不承担相关法律责任。如果您发现本站有任何涉嫌侵权/非法内容,请发送邮件举报。一经核实,该网站将立即删除。 本文由斑马博客整理。本文链接为:https://m.genealogy-computer-tips.com/index.php/post/7344.html